【问题标题】:node.js cannot parse ISOString date?node.js 无法解析 ISOString 日期?
【发布时间】:2014-07-14 02:25:20
【问题描述】:

我们使用 new Date().toISOString() 以 ISO 格式存储每个日期数据。

我尝试将此 ISO 格式的日期转换为 node.js 中的 Date 对象,但我得到 Invalid Date 响应。

日期字符串为isoDate = 2014-07-09T14:00:00.000Z 我在Date.parse(isoDate);new Date(isoDate); 上做了console.log 但每个都返回NaNInvalid Date

我检查了日期字符串是否包含任何不可见的错误字符,但它们很好,可以在浏览器控制台上转换。

这是否意味着我需要手动转换字符串并使用已解析的字符串创建 Date 对象?

感谢阅读。

【问题讨论】:

  • 在这里工作得很好...你确定 isoDate 是一个字符串吗? (而不是 - 例如 - 缓冲区)
  • 是的,刚刚做了 typeof 检查它说的是字符串。这可能是特定于版本的吗?我们目前使用的是 0.10.29。
  • 我用的是同一个版本。无论如何,它应该适用于任何版本的节点...
  • 这很奇怪,为了确保我使用正确的字符串,我刚刚尝试在 node.js 上创建新的 ISO 字符串并从字符串创建 Date 对象,但它返回 Invalid Date。
  • new Date(new Date().toISOString()) 非常适合我

标签: javascript node.js date


【解决方案1】:

尝试使用moment 库。它有很多处理日期的功能,并且可以很容易地在客户端和服务器端使用。调用 moment("2014-07-09T14:00:00.000Z").toDate() 会使用此库将您的字符串转换为 Date JavaScript 对象。

【讨论】:

    【解决方案2】:

    我发布此答案以防有人像我一样遇到这种情况。

    发生在我身上的是我以为我从浏览器发送了一个 ISOString

    {
      startDate: date.startDate
    }
    

    实际上我是在发送一个时刻实例作为参数

    当我检查网络检查器时,我发现正在发送的数据是 ISO 格式 - 是的,但它用双引号“”括起来

    {
      startDate: "2016-12-31T16:00:00.000Z"
    }
    

    不应包含在双引号中,应如下所示

    {
      startDate: 2016-12-31T16:00:00.000Z
    }
    

    对我有用的是将时刻解析为 iso 字符串

    {
      startDate: date.startDate.toISOString()
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2013-05-23
      相关资源
      最近更新 更多