【问题标题】:How to create a javascript date from 12 hour format如何从 12 小时格式创建 javascript 日期
【发布时间】:2016-03-23 23:22:54
【问题描述】:

如何从具有这种格式的日期创建 Date 对象:

2016 年 3 月 23 日下午 02:00:00

【问题讨论】:

  • 有人问过这个问题many, many times。手动解析字符串,要么编写函数,要么使用库。 请勿 使用 Date 构造函数或 Date.parse(它们等效于解析字符串)。如果您想要一个简单的解析器和格式化程序,请考虑date-format.js
  • 谢谢@RobG!抱歉,我不知道要诚实搜索什么。我想尝试太具体了,但没有找到我需要的东西。

标签: javascript date timestamp frontend


【解决方案1】:

Date对象可以解析字符串:new Date('03/23/2016 02:00:00 PM')

例如:

var date = new Date('03/23/2016 02:00:00 PM') // => "Wed Mar 23 2016 14:00:00 GMT-0700 (PDT)"
date.getFullYear() // => 2016

但是,我建议使用其他人已经花时间考虑边缘情况的库,例如时区等(我用过的一个很好的是moment.js)。

记住(从 moment.js 文档开始):

警告:浏览器对解析字符串的支持不一致。因为没有关于应该支持哪些格式的规范,所以在某些浏览器中有效的内容在其他浏览器中无效。

为了获得一致的结果解析除 ISO 8601 字符串之外的任何内容,您应该使用 String + Format

【讨论】:

  • moment.js 文档不是 ECMAScript 的权威,请使用 ECMA-262。在这种情况下,moment.js 文档是错误的,在 ES5 中引入了对有限选择的 ISO 8601 格式的支持,但是支持仍然不一致并且不能依赖。此外,即使是当前的浏览器也无法正确解析 ISO 格式,因此总是指定格式或使用定制的解析器。
【解决方案2】:
var date = new Date("3/23/2016 02:00:00 PM");
console.log(date);

然后您可以访问 Date 对象的所有方法。

【讨论】:

  • 不,不要那样做。使用 Date 构造函数(和 Date.parse,它是等效的)解析字符串是不可靠的。只是不要这样做。
  • @RobG - 谢谢,你的观点很好。将在何处使用代码是一个重要的考虑因素。如果它是一个小的学习项目,最快速的解决方案可能是最好的。如果它针对任何专业解决方案,则应严格遵守标准和最佳实践来实施。
【解决方案3】:

看着MDN var date = new Date('03/23/2016 02:00:00 PM')

【讨论】:

  • MDN 不是任何事情的权威,它是一个(非常有帮助的)公共维基,任何人都可以贡献。语言规范中根本没有要求解析该格式字符串。
【解决方案4】:

你可以使用类似 date.js 的东西: 先用脚本,再写日期:

<script type="text/javascript" src="http://www.datejs.com/build/date.js"></script> 
....
document.write(new Date().toString("dd:MM:yyyy hh:mm:ss tt"));

【讨论】:

  • 解析必须也包含格式,否则结果不可靠。
猜你喜欢
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2013-03-10
  • 2023-04-06
相关资源
最近更新 更多