我注意到JavaScript的新Date()函数在接受多种格式的日期方面非常聪明。

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

调用new Date()函数时,我在任何地方都找不到显示所有有效字符串格式的文档。

这用于将字符串转换为日期。如果我们从相反的方面来看,即将日期对象转换为字符串,直到现在,我的印象是JavaScript没有将日期对象格式化为字符串的内置API。

编者按:以下方法是询问者在特定浏览器上的尝试,但通常不起作用;请参阅本页上的答案以了解一些实际解决方案。

今天,我在date对象上使用了toString()方法,令人惊讶的是,它可以将日期格式化为字符串。

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

在这里,我也找不到任何关于将日期对象格式化为字符串的方法的文档。

列出Date()对象支持的格式说明符的文档在哪里?


当前回答

d=日期.now();d=新日期(d);d=(d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear()+''+(d.getHours()>12?d.getHours()-12:d.getHoures())+':'+d.getMinutes()+''+(d.getHouers()>=12?“下午”:“上午”);console.log(d);

其他回答

sugar.js库有一些很棒的功能,可以在JavaScript中处理日期。它有很好的记录。

Sugar从Date.create开始就给了Date类很多爱可以理解15大调任何格式的日期的方法语言,包括“1小时前”等相对格式。日期可以也可以使用易于理解的语言以任何格式或语言输出语法,以及常用日期格式的快捷方式。复杂日期与is这样的方法进行比较也是可能的,它可以理解任何格式和应用内置精度。

几个例子:

Date.create('July 4, 1776')  -> July 4, 1776
Date.create(-446806800000)   -> November 5, 1955
Date.create(1776, 6, 4)      -> July 4, 1776
Date.create('1776年07月04日', 'ja') -> July 4, 1776
Date.utc.create('July 4, 1776', 'en')  -> July 4, 1776

Date.create().format('{Weekday} {d} {Month}, {yyyy}')    -> Monday July 4, 2003
Date.create().format('{hh}:{mm}')                        -> 15:57
Date.create().format('{12hr}:{mm}{tt}')                  -> 3:57pm
Date.create().format(Date.ISO8601_DATETIME)              -> 2011-07-05 12:24:55.528Z

Date.create().is('the 7th of June') -> false
Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"

如果您已经在项目中使用jQuery UI,则可以使用内置日期选择器方法格式化日期对象:

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

但是,日期选择器仅设置日期格式,而不能设置时间格式。

查看jQueryUI日期选择器formatDate示例。

确保在JavaScript中处理日期时签出Datejs。正如您在toString函数的例子中看到的那样,它非常令人印象深刻,并且有很好的文档记录。

编辑:Tyler Forsyth指出,datejs已经过时了。我在当前的项目中使用了它,并没有遇到任何问题,但您应该意识到这一点,并考虑其他选择。

我找不到任何关于有效日期格式的权威文档,所以我编写了自己的测试,看看各种浏览器支持什么。

http://blarg.co.uk/blog/javascript-date-formats

我的结果得出结论,以下格式在我测试的所有浏览器中都有效(示例使用日期“2013年8月9日”):

[完整年份]/[月份]/[日期编号]-月份可以是带或不带前导零的数字,也可以是短格式或长格式的月份名称,日期编号可以带或不带有前导零。

2013/08/092013/08/92013/8/092013/8/92013/08/092013年8月9日2013年8月09日2013年8月9日

【月份】/【全年】/【日期编号】-月份可以是带或不带前导零的数字,也可以是短格式或长格式的月份名称,日期编号可以带或不带有前导零。

08/2013/0908/2013/98/2013/098/2013/92013/09年8月2013年8月/9日2013年8月09日2013年8月/9日

用空格分隔的[整年]、[月名]和[日期编号]的任意组合-月名可以是短格式或长格式,日期编号可以是带或不带前导零。

2013年8月9日2013年8月09日2013年8月9日2013年8月9日2013年8月9日2013年8月9日等

也适用于“现代浏览器”(或除IE9及以下版本外的所有浏览器)

[全年]-[月号]-[日期号]-月号和日期号必须包含前导零(这是MySQL日期类型使用的格式)

2013-08-09

使用月份名称:有趣的是,在使用月份名称时,我发现只有月份名称的前3个字符被使用过,因此以下所有字符都是完全有效的:

new Date('9 August 2013');
new Date('9 Aug 2013');
new Date('9 Augu 2013');
new Date('9 Augustagfsdgsd 2013');

请参阅dtmFRM.js。如果您熟悉C#的自定义日期和时间格式字符串,这个库应该做完全相同的事情。

演示:

var format = new dtmFRM();
var now = new Date().getTime();

$('#s2').append(format.ToString(now,"This month is : MMMM") + "</br>");
$('#s2').append(format.ToString(now,"Year is  : y or yyyy or yy") + "</br>");
$('#s2').append(format.ToString(now,"mm/yyyy/dd") + "</br>");
$('#s2').append(format.ToString(now,"dddd, MM yyyy ") + "</br>");
$('#s2').append(format.ToString(now,"Time is : hh:mm:ss ampm") + "</br>");
$('#s2').append(format.ToString(now,"HH:mm") + "</br>");
$('#s2').append(format.ToString(now,"[ddd,MMM,d,dddd]") + "</br></br>");

now = '11/11/2011 10:15:12' ;

$('#s2').append(format.ToString(now,"MM/dd/yyyy hh:mm:ss ampm") + "</br></br>");

now = '40/23/2012'
$('#s2').append(format.ToString(now,"Year is  : y or yyyy or yy") + "</br></br>");