我注意到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()对象支持的格式说明符的文档在哪里?


当前回答

请参阅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>");

其他回答

DateJS当然是功能齐全的,但我推荐这种非常简单的库(JavaScript日期格式),我更喜欢它,因为它只有120行左右。

这个问题的具体答案在以下两行中找到:

//拉今年的最后两位数console.log(newDate().getFullYear().toString().substr(2,2));

格式化完整日期时间示例(MMddyy):jsFiddle

JavaScript:

//将日期格式化为MMddyy的函数函数格式日期(d){//得到这个月var month=d.getMonth();//把握好这一天var day=d.getDate();//获得年度最佳成绩var year=d.getFullYear();//拉今年的最后两位数year=year.toString().substr(2,2);//由于索引为0,每月递增1月=月+1;//将月份转换为字符串月=月+“”;//如果月份是1-9,请用0向右填充两位数如果(月长度==1){月=“0”+月;}//将日期转换为字符串day=天+“”;//如果日期在1-9之间,则用0表示两位数如果(日长度==1){天=“0”+天;}//返回字符串“MMddyy”回归月+日+年;}var d=新日期();console.log(formatDate(d));

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

今天我偶然发现了这一点,很惊讶没有人花时间回答这个简单的问题。的确,有很多库可以帮助处理日期操作。有些人比其他人好。但这不是问的问题。

AFAIK,纯JavaScript不支持您所表示的格式说明符。但它确实支持格式化日期和/或时间的方法,例如.toLocaleDateString()、.toLocaleTimeString()和.toUTCString()。

我最常使用的Date对象引用是在w3schools.com网站上(但快速的谷歌搜索会发现更多可能更好地满足您的需求)。

还要注意,Date Object财产部分提供了一个到原型的链接,该链接说明了使用自定义方法扩展Date对象的一些方法。多年来,JavaScript社区一直在争论这是否是最佳实践,我并不是支持或反对它,只是指出它的存在。

您引用的功能不是标准的Javascript,不太可能跨浏览器移植,因此不是很好的实践。ECMAScript 3规范将解析和输出格式功能留给Javascript实现。ECMAScript 5添加了ISO8601支持的子集。我相信你提到的toString()函数是一个浏览器的创新(Mozilla?)

有几个库提供了参数化这一点的例程,其中一些库提供了广泛的本地化支持。您还可以查看dojo.date.local中的方法。

无框架,有限但重量轻

var d = (new Date()+'').split(' ');
// ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]

[d[3], d[1], d[2], d[4]].join(' ');
// "2013 Sep 03 21:58:03"