在哪里可以找到有关在 JavaScript 中格式化日期的文档?

IT技术 javascript date
2020-12-09 22:17:13

我注意到 JavaScript 的new 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 将日期对象格式化为字符串。

编者注:以下方法是提问者的企图是工作在一个特定的浏览器,但确实不是一般的工作; 请参阅此页面上的答案以查看一些实际解决方案。

今天,我在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()对象支持的格式说明符的文档在哪里

6个回答

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

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

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

例子:

var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
console.log(curr_date + "-" + curr_month + "-" + curr_year);

这两个站点都有限制性许可证。因此,如果您使用该代码(未经许可),您将违反。Momentjs ( stackoverflow.com/a/10119138/278976 ) 看起来是更好的选择,并且是 MIT 许可证。
2021-02-13 22:17:13
@codeinthehole “在 Javascript 中格式化日期”是个问题。“直到现在,我的印象是 JavaScript 没有内置 API 来将日期对象格式化为字符串。” 但随后谈到了行为,我相信他认为这是 JavaScript 原生的。在不知道他错误地引用了哪个库的情况下,我认为最好的猜测是他在问这个问题,“我如何在 javascript 中格式化日期?” 我不认为我在进行疯狂的跳跃。
2021-02-18 22:17:13
MM 表示 01-12,而不是 1-12:2013-04-17 => OK 2013-4-17 => BAD
2021-02-26 22:17:13
@peller 这个答案回答了“我如何在 javascript 中格式化日期?”的问题。这实际上是问题的标题。在问题的主体中,他颇具误导性。而且,就您而言,此答案并未讨论使用随机非标准库或未提及库的字符串格式。但是问题的那部分被问错了,正如对问题的#1 评论指出的那样。所以,这回答了真正的问题,而不是实际不存在的格式字符串。
2021-02-27 22:17:13
@麦凯;这不是问题。我认为您要么误解了 peller 的要求,要么在推理中显得迟钝。
2021-03-02 22:17:13

时刻.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 月)

这还提供了围绕 Date 对象的装饰器模式,而不是猴子冲撞核心对象,因此您不太可能在路上遇到冲突。
2021-02-07 22:17:13
@Tumerj 认为它很有用并不能解决轻量级的问题。两者没有关系。
2021-02-08 22:17:13
你不能通过拆除发动机来使喷气式飞机更轻,因为它会变成滑翔机而不是喷气式飞机。轻量级意味着某些东西只有必要的功能才能执行指定的功能。因此,这是一个轻量级的解决方案。
2021-02-22 22:17:13
请停止滥用“轻量级”这个词。对于此类功能,即使 5kb 也大得离谱,而按照今天,该大小已增加到 19kb。
2021-02-27 22:17:13
@Pumbaa80 我不同意“即使 5kb 对于这种功能来说也大得离谱”。你看过文档吗?它是一个非常有用的库,用于处理 JS 中的日期。我知道,对于像“D/M/Y”这样的基本格式的单次使用,拥有一个大于几个 KB 的库可能有点矫枉过正,但是几个 KB 的差异变得可以忽略不计,因为库提供的易用性. 就几KB而言,可维护的代码是一件好事。如果它缩小了+100KB,我会同意。
2021-02-28 22:17:13

如果你已经在你的项目中使用了jQuery UI,你可以使用内置的 datepicker 方法来格式化你的日期对象:

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

但是,日期选择器只能格式化日期,不能格式化时间。

看看示例jQuery UI datepicker formatDate

@Pomster - 尝试使用这个: document.getElementById(id).value = $.datepicker.formatDate('yy-mm-dd', new Date());
2021-02-09 22:17:13
我更喜欢使用这种无需任何库即可获取时间的解决方案: new Date().toTimeString().match( /^([0-9]{2}:[0-9]{2}:[0-9 ]{2})/ )[0] 仅供参考
2021-02-10 22:17:13
如何告诉它使用当地时间或祖鲁语?
2021-02-20 22:17:13
@Pomster - 是什么让你认为字符串“txtAdvDate”会有一个 val 方法?你的意思是 $('#txtAdvDate').val() 吗?假设它适合构造函数之一(请参阅此处w3schools.com/jsref/jsref_obj_date.asp),那么它就可以正常工作。
2021-03-04 22:17:13
有没有办法做到这一点。$.datepicker.formatDate('yy-mm-dd', new Date("txtAdvDate".Val()); 或者类似的东西
2021-03-08 22:17:13

自定义格式化功能:

对于固定格式,一个简单的函数即可完成工作。以下示例生成国际格式 YYYY-MM-DD:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

注意:然而,扩展 Javascript 标准库通常不是一个好主意(例如通过将此函数添加到 Date 的原型)。

更高级的功能可以根据格式参数生成可配置的输出。在同一页面中有几个很好的例子。

如果编写格式化函数太长,有很多库可以做。其他一些答案已经列举了它们。但是增加的依赖性也有它的对应部分。

标准的 ECMAScript 格式化函数:

由于 ECMAscript 的更新版本,Date该类具有一些特定的格式化功能:

toDateString:依赖于实现,只显示日期。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString:显示 ISO 8601 日期和时间。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON : JSON 的字符串化符。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString:依赖于实现,区域设置格式的日期。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString:依赖于实现,区域设置格式的日期和时间。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString:依赖于实现,区域设置格式的时间。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString:Date 的通用 toString。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

注意:可以从这些格式化函数中生成自定义输出:

new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD
如果没有 9 月 11 日的例子会很有帮助,这样就可以清楚地知道在哪个位置代表日和月。
2021-02-06 22:17:13
new Date().toISOString().slice(0,10) // "2015-04-27"
2021-02-19 22:17:13
应该接受答案,因为它提供了所需的格式(01-01-2000,而不是 1-1-2000)
2021-02-21 22:17:13

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

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

AFAIK,纯 JavaScript 不支持格式说明符,你已经表明你想使用它们的方式但它支持的方法格式化日期和/或时间,如.toLocaleDateString().toLocaleTimeString().toUTCString()

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

另请注意,日期对象属性部分提供了指向 的链接prototype,该链接说明了可以使用自定义方法扩展日期对象的一些方法。多年来,JavaScript 社区一直在争论这是否是最佳实践,我不赞成或反对它,只是指出它的存在。

2021-02-11 22:17:13
我的回答也试图解决这个问题。我确实相信 Firefox 或 Mozilla 浏览器曾经提供了一个 Date.toString() 方法,它采用了这样的格式字符串。不幸的是,我找不到旧文档的踪迹。它不再是标准的一部分,似乎不再受任何地方支持,即使在 Firefox 中也是如此。
2021-03-04 22:17:13