NodeJS日期解析“旧”rfc1123的日期不正确

时间:2015-10-13 00:29:56

标签: node.js date datetime rfc1123

我有一个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 Date有任何建议吗?如果日期是“新的”(即1000年以上),事情似乎工作正常,但“旧”日期似乎已经破裂,否则我会遗漏一些旧日期所需的“额外”。

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

1 个答案:

答案 0 :(得分: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);