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


当前回答

只是为了继续龚志涛的坚定回答-这处理上午/下午

 Date.prototype.format = function (format) //author: meizz
{
    var hours = this.getHours();
    var ttime = "AM";
    if(format.indexOf("t") > -1 && hours > 12)
    {
        hours = hours - 12;
        ttime = "PM";
     }

var o = {
    "M+": this.getMonth() + 1, //month
    "d+": this.getDate(),    //day
    "h+": hours,   //hour
    "m+": this.getMinutes(), //minute
    "s+": this.getSeconds(), //second
    "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
    "S": this.getMilliseconds(), //millisecond,
    "t+": ttime
}

if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
  (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length == 1 ? o[k] :
        ("00" + o[k]).substr(("" + o[k]).length));
return format;
}

其他回答

我喜欢使用JavaScript和使用日期来格式化时间和日期的10种方法。

基本上,您有三种方法,必须自己组合字符串:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

例子:

var d=新日期();var curr_date=d.getDate();var curr_month=d.getMonth()+1//月份为零var curr_year=d.getFullYear();console.log(curr_date+“-”+curr_month+“-“+curr_year);

许多框架(您可能已经在使用)具有您可能不知道的日期格式。jQueryUI已经被提及,但其他框架如Kendo UI(全球化)、Yahoo UI(Util)和AngularJS也有。

// 11/6/2000
kendo.toString(new Date(value), "d")

// Monday, November 06, 2000
kendo.toString(new Date(2000, 10, 6), "D")

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

引用tc39网站:

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

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

其他资源:

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

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

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

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

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

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

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

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