【问题标题】:Why is a Javascript Date from string different to the same date from Date object为什么来自字符串的 Javascript 日期与来自 Date 对象的相同日期不同
【发布时间】:2018-12-10 09:01:16
【问题描述】:

我刚刚发现了一个意外行为,我在隐藏的表单字段中放置了一个时间戳 (Date)。在提交(更新)表单时,我对文档增量进行了一些检查(因为我只想更新编辑的差异)。

那时我遇到了,未编辑的隐藏 Date 字段已被检测为不同。

我将其分解为以下重现代码:

const date = new Date() // Mon Dec 10 2018 09:42:34 GMT+0100 (Timezone goes here)
const dateStr = date.toString()

console.log(date)                // "2018-12-10T08:42:34.388Z"
console.log(new Date(dateStr));  // "2018-12-10T08:42:34.000Z"

只有在日期被格式化为字符串时才会发生(例如,当我将其分配为输入字段的值时会发生这种情况)。

谁能解释为什么会这样?

【问题讨论】:

  • 您忘记查看console.log(dateStr)。那里没有毫秒信息。
  • 确实,我完全处于将状态视为将通过表单发送的心态。考虑到这一点,我的整个编辑历史都受到了损害:-/

标签: javascript string date


【解决方案1】:

出现问题是因为.toString() 去掉了日期的毫秒部分。 当您尝试再次从字符串重建日期时,毫秒部分将默认为零,因为它没有再次给出/提供。

【讨论】:

    【解决方案2】:

    因为toString() 将日期转换为 ISO 8601,精确到秒。

    您要比较的日期相差几毫秒。

    【讨论】:

    • 因参考 ISO 8601 而被接受。
    • "toString() 将日期转换为 ISO 8601" 并非总是如此。在 ECMAScript 2018 之前,Date.prototype.toString 的格式依赖于实现,但 now it's standardised。当然,控制台本身就是一个法则。
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多