我注意到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()对象支持的格式说明符的文档在哪里?
我找不到任何关于有效日期格式的权威文档,所以我编写了自己的测试,看看各种浏览器支持什么。
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');
动量.js
它是一个(轻量级)*JavaScript日期库,用于解析、处理和格式化日期。
var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA"); // "Sun, 3PM"
(*)轻量级意味着在尽可能小的设置中缩小9.3KB+gzip(2014年2月)