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


当前回答

对于好奇的人来说,有一个名为tc39/temporal的实验特性,目前正处于第3阶段,它为ECMAScript语言带来了一个现代的日期/时间API。

引用tc39网站:

日期一直是ECMAScript中的一个长期难点。这是对Temporal的建议,它是一个充当顶级命名空间(如Math)的全局对象,为ECMAScript语言带来了现代的日期/时间API。要详细了解Date的一些问题以及Temporal的动机,请参阅:Fixing JavaScript Date。

这里有一本烹饪书,可以帮助您开始学习Temporal的来龙去脉。

其他资源:

GitHub存储库-tc39/临时提案YouTube上还有一段视频,详细介绍了这一提议。本文对上述视频进行了简要概述-了解JavaScript如何使用提案时间推进DateTime如何超越时间:使用时态构建未来JavaScript应用程序

其他回答

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

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

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

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

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

动量.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月)

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"

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);

设置日期格式以返回“2012-12-29”的正确方法是使用JavaScript日期格式中的脚本:

var d1 = new Date();
return d1.format("dd-m-yy");

此代码不起作用:

var d1 = new Date();
d1.toString('yyyy-MM-dd');