Javascript 将带时区 MESZ 的日期转换为 NaN
Javascript converts date with timezone MESZ to NaN
我遇到了这个日期字符串:
2017-08-19T11:54:00MESZ
当我尝试如下转换它时,它 returns NaN:
let date = Date.parse("2017-08-19T11:54:00MESZ");
似乎无法识别此字符串的结尾。
您使用的格式不正确。
看看这个:
(new Date).toISOString()
"2017-08-19T10:05:18.700Z"
相比之下,您要转换的字符串是:
"2017-08-19T11:54:00.MESZ"
Date.parse
适用于 a variant of ISO8601 or RFC2822。让我们看看这两个选项如何为您工作。
使用 ISO
它将接受 UTC 时区描述符 ("Z") 或时区偏移量 (read on)。因此时区指令"MESZ"无效。
要获得有效的解决方案,您必须计算从 MESZ 到 Z 的时区偏移量,即 +2 小时,并附加使用所需时区表示的时间:
Date.parse("2017-08-19T11:54:00+02:00")
1503136440000
使用 RFC2822
示例:"Mon, 25 Dec 1995 13:30:00 GMT"
RFC 的问题在于它 does not accept any other time zone than GMT, UTC and Pacific, Central, Eastern, Mountain times 现在对您来说并不是很有用。您遇到了同样的问题:您必须使用时区偏移指令来表示日期:
Date.parse("Sat, 19 Aug 2017 11:54:00 +0200")
1503136440000
你基本上坚持使用 UTC,但坦率地说,它在很多方面可能是一件好事。
我遇到了这个日期字符串:
2017-08-19T11:54:00MESZ
当我尝试如下转换它时,它 returns NaN:
let date = Date.parse("2017-08-19T11:54:00MESZ");
似乎无法识别此字符串的结尾。
您使用的格式不正确。
看看这个:
(new Date).toISOString()
"2017-08-19T10:05:18.700Z"
相比之下,您要转换的字符串是:
"2017-08-19T11:54:00.MESZ"
Date.parse
适用于 a variant of ISO8601 or RFC2822。让我们看看这两个选项如何为您工作。
使用 ISO
它将接受 UTC 时区描述符 ("Z") 或时区偏移量 (read on)。因此时区指令"MESZ"无效。
要获得有效的解决方案,您必须计算从 MESZ 到 Z 的时区偏移量,即 +2 小时,并附加使用所需时区表示的时间:
Date.parse("2017-08-19T11:54:00+02:00")
1503136440000
使用 RFC2822
示例:"Mon, 25 Dec 1995 13:30:00 GMT"
RFC 的问题在于它 does not accept any other time zone than GMT, UTC and Pacific, Central, Eastern, Mountain times 现在对您来说并不是很有用。您遇到了同样的问题:您必须使用时区偏移指令来表示日期:
Date.parse("Sat, 19 Aug 2017 11:54:00 +0200")
1503136440000
你基本上坚持使用 UTC,但坦率地说,它在很多方面可能是一件好事。