NodeJS 日期解析 "old" rfc1123 日期不正确
NodeJS Date parsing "old" rfc1123 dates incorrectly
我有一个 RFC1123 日期字符串,例如:'Mon, 01 Jan 0001 00:00:01 GMT'
我想在 NodeJS 中将此字符串解析为 Date
。我以为 new Date('Mon, 01 Jan 0001 00:00:01 GMT')
会实现我想要的……但事实并非如此。当我检查结果 Date
的内容时,我看到 .toUTCString()
给出了 Mon, 01 Jan 2001 00:00:01 GMT
。
我不知道解析函数是如何确定年份是 2001 年的。
更奇怪的是,如果我改用 ISO8601 格式,并执行:new Date('0001-01-01T00:00:01Z').toUTCString()
我得到 Mon, 01 Jan 1 00:00:01 GMT
——这正是我所期望的——但如果我随后执行 new Date('Mon, 01 Jan 1 00:00:01 GMT')
我仍然得到 2001 年的年份。
注意:我可以用另一种语言 (C#) 处理这些相同的字符串,我得到的正是我所期望的。
有人对如何在 NodeJS 中正确反序列化 RFC1123 日期有任何建议吗?如果日期是 "new"(即 1000 年以上),一切似乎都正常,但 "old" 日期似乎已损坏,否则我遗漏了一些 "extra" 旧日期所需的内容.
编辑:从技术上讲,RFC 1123/2822 格式似乎有 1900 年的下限——尽管 Date
允许我们低于该值,所以我不确定是什么阻止了它支持年份<100.
您可以使用 moment.js 来解析日期:
var dateFormat = 'ddd, DD MMM YYYY HH:mm:ss',
dateString = 'Mon, 01 Jan 0001 00:00:01 GMT';
var dateTime = moment.utc(dateString, dateFormat);
我有一个 RFC1123 日期字符串,例如:'Mon, 01 Jan 0001 00:00:01 GMT'
我想在 NodeJS 中将此字符串解析为 Date
。我以为 new Date('Mon, 01 Jan 0001 00:00:01 GMT')
会实现我想要的……但事实并非如此。当我检查结果 Date
的内容时,我看到 .toUTCString()
给出了 Mon, 01 Jan 2001 00:00:01 GMT
。
我不知道解析函数是如何确定年份是 2001 年的。
更奇怪的是,如果我改用 ISO8601 格式,并执行:new Date('0001-01-01T00:00:01Z').toUTCString()
我得到 Mon, 01 Jan 1 00:00:01 GMT
——这正是我所期望的——但如果我随后执行 new Date('Mon, 01 Jan 1 00:00:01 GMT')
我仍然得到 2001 年的年份。
注意:我可以用另一种语言 (C#) 处理这些相同的字符串,我得到的正是我所期望的。
有人对如何在 NodeJS 中正确反序列化 RFC1123 日期有任何建议吗?如果日期是 "new"(即 1000 年以上),一切似乎都正常,但 "old" 日期似乎已损坏,否则我遗漏了一些 "extra" 旧日期所需的内容.
编辑:从技术上讲,RFC 1123/2822 格式似乎有 1900 年的下限——尽管 Date
允许我们低于该值,所以我不确定是什么阻止了它支持年份<100.
您可以使用 moment.js 来解析日期:
var dateFormat = 'ddd, DD MMM YYYY HH:mm:ss',
dateString = 'Mon, 01 Jan 0001 00:00:01 GMT';
var dateTime = moment.utc(dateString, dateFormat);