【问题标题】:NodeJS Date parsing "old" rfc1123 dates incorrectlyNodeJS日期解析“旧”rfc1123日期不正确
【发布时间】:2016-01-10 14:11:52
【问题描述】:

我有一个 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 日期有任何建议吗?如果日期是“新的”(即 1000 年以上),事情似乎还可以,但“旧”日期似乎坏了,或者我错过了旧日期所需的“额外”内容。

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

【问题讨论】:

标签: node.js date datetime rfc1123


【解决方案1】:

您可以使用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);

【讨论】:

  • 执行此操作,然后使用 moment().toDate() 将其转换为日期。
猜你喜欢
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 2022-10-02
  • 2021-06-11
  • 1970-01-01
  • 2014-03-16
  • 2011-02-04
相关资源
最近更新 更多