0

我有一个 RFC1123 日期字符串,例如:'Mon, 01 Jan 0001 00:00:01 GMT'

我想将此字符串解析为DateNodeJS 中的一个。我以为这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 日期有任何建议吗?如果日期是“新的”(即 1000 年以上),事情似乎还可以,但“旧”日期似乎坏了,否则我错过了旧日期所需的“额外”内容。

编辑:从技术上讲,RFC 1123/2822 格式的下限为 1900 年——尽管Date允许我们低于该值,所以我不确定是什么阻止了它支持 <100 年。

4

1 回答 1

2

您可以使用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);
于 2015-10-13T01:33:32.243 回答