微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Date.parse 给出不正确的结果?

如何解决为什么 Date.parse 给出不正确的结果?

在第 5 版规范出来之前,该Date.parse方法完全依赖于实现new Date(string)相当于Date.parse(string)除了后者返回一个数字而不是 a Date)。在第 5 版规范中,添加了要求以支持简化的 (并且略有错误) ISO-8601(另请参阅什么是 JavaScript 中的有效日期时间字符串?)。但除此之外,除了他们必须接受任何输出(不说那是什么)之外, 没有 要求Date.parse/应该接受什么。new Date(string)``Date#toString

从 ECMAScript 2017(第 8 版)开始,实现需要解析其输出Date#toStringandDate#toUTCString,但未指定这些字符串的格式。

Date#toString从 ECMAScript 2019(第 9 版)开始,和的格式Date#toUTCString已被指定为(分别):

  1. ddd MMM DD YYYY HH:mm:ss ZZ [(timezone name)] 例如 Tue Jul 10 2018 18:39:58 GMT+0530 (IST)

  2. ddd, DD MMM YYYY HH:mm:ss Z 例如 格林威治标准时间 2018 年 7 月 10 日星期二 13:09:58

提供 2 种Date.parse应该在新实现中可靠解析的格式(请注意,支持并不普遍,非兼容的实现将继续使用一段时间)。

我建议手动解析日期字符串,并将Date 构造函数与年、月和日参数一起使用以避免歧义:

// parse a date in yyyy-mm-dd format
function parseDate(input) {

  let parts = input.split('-');

  // new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // Note: months are 0-based
}

解决方法

案例一:

new Date(Date.parse("Jul 8,2005"));

输出:

2005 年 7 月 8 日星期五 00:00:00 GMT-0700 (PST)

案例二:

new Date(Date.parse("2005-07-08"));

输出:

2005 年 7 月 7 日星期四 17:00:00 GMT-0700 (PST)


为什么第二个解析不正确?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。