Javascript 日期解析 - 为什么?
Javascript date parsing - why?
我在 javascript 中遇到日期解析问题。
我可以有不同格式的日期,所以我需要通用解析器。我使用 Date.parse(),但有人能解释一下为什么会这样吗:
Date.parse("1/07/2018");
1515279600000
但是
Date.parse("26/07/2018");
NaN
今天是7月26日,为什么有Nan呢??
Date
对象不一定支持这些格式。它需要支持的仅格式是规范描述的the ISO-8601 variant。
使用多参数构造函数(注意:6 = 七月,月份从 0 开始):
// To get a Date instance
new Date(2018, 6, 26); // Local time
new Date(Date.UTC(2018, 6, 26)); // UTC
// To get the milliseconds-since-the-Epoch value
new Date(2018, 6, 26).getTime(); // Local
Date.UTC(2018, 6, 26); // UTC
大多数(所有?)JavaScript 引擎也将接受 U.S. 格式的日期(即使在非 U.S. 语言环境中),格式为 mm/dd/yyyy
,但您不能确定它是否会在本地时间或 UTC 中解析它。这就是为什么您的第一个示例有效(结果是 1 月 7 日,而不是 7 月 1 日),而您的第二个示例无效("month" 无效)。
如果您不想自己处理解析,Moment 等库可以为您完成(以及许多其他事情)。
请查看 Data.parse 方法文档:https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/Date/parse
你需要像mm/dd/yyyy那样传递它,或者你可以这样传递:
Date.parse("07/26/2018");
Date.parse("Jul 26, 2018");
JavaScript 期望您的日期在用斜杠分隔时采用特定格式。这并不意味着您不能使用以其他方式格式化的日期,您只需要知道它们是什么时候。如果您的日期格式为 dd-MM-yyyy,您可以将其更改为正确的格式,如下所示:
let date = "26/07/2018"
date = date.split('/');
date = new Date(`${date[1]}/${date[0]}/${date[2]}`)
根据 Mozilla documentation。
预计 ISO 8601 格式(和其他变体)如“2017-04-16”。不支持您的格式。
我建议坚持使用标准格式,因为即使可能支持非标准格式,它也可能无法在所有浏览器上运行
我在 javascript 中遇到日期解析问题。
我可以有不同格式的日期,所以我需要通用解析器。我使用 Date.parse(),但有人能解释一下为什么会这样吗:
Date.parse("1/07/2018");
1515279600000
但是
Date.parse("26/07/2018");
NaN
今天是7月26日,为什么有Nan呢??
Date
对象不一定支持这些格式。它需要支持的仅格式是规范描述的the ISO-8601 variant。
使用多参数构造函数(注意:6 = 七月,月份从 0 开始):
// To get a Date instance
new Date(2018, 6, 26); // Local time
new Date(Date.UTC(2018, 6, 26)); // UTC
// To get the milliseconds-since-the-Epoch value
new Date(2018, 6, 26).getTime(); // Local
Date.UTC(2018, 6, 26); // UTC
大多数(所有?)JavaScript 引擎也将接受 U.S. 格式的日期(即使在非 U.S. 语言环境中),格式为 mm/dd/yyyy
,但您不能确定它是否会在本地时间或 UTC 中解析它。这就是为什么您的第一个示例有效(结果是 1 月 7 日,而不是 7 月 1 日),而您的第二个示例无效("month" 无效)。
如果您不想自己处理解析,Moment 等库可以为您完成(以及许多其他事情)。
请查看 Data.parse 方法文档:https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/Date/parse
你需要像mm/dd/yyyy那样传递它,或者你可以这样传递:
Date.parse("07/26/2018");
Date.parse("Jul 26, 2018");
JavaScript 期望您的日期在用斜杠分隔时采用特定格式。这并不意味着您不能使用以其他方式格式化的日期,您只需要知道它们是什么时候。如果您的日期格式为 dd-MM-yyyy,您可以将其更改为正确的格式,如下所示:
let date = "26/07/2018"
date = date.split('/');
date = new Date(`${date[1]}/${date[0]}/${date[2]}`)
根据 Mozilla documentation。 预计 ISO 8601 格式(和其他变体)如“2017-04-16”。不支持您的格式。
我建议坚持使用标准格式,因为即使可能支持非标准格式,它也可能无法在所有浏览器上运行