【问题标题】:Why does the safari date field appear as invalid date? [duplicate]为什么 Safari 日期字段显示为无效日期? [复制]
【发布时间】:2019-10-15 12:23:56
【问题描述】:

Safari 不接受我输入的时间格式。是什么原因?

 this.state.dataDate = "2019-10-15 11:59:27";
 var cacheDateUTC = new Date(this.state.dataDate + "Z");
 var cacheDateLocal = cacheDateUTC.toLocaleString();

 // Chrome browser
 -- "10/15/2019, 3:19:54 PM"

 // Safari browser
 -- "Invalid Date"

我找到了解决办法;

 var cacheDateUTC = moment(this.state.dataDate + "Z").format("MM/DD/YYYY, LTS");

【问题讨论】:

标签: javascript reactjs date momentjs


【解决方案1】:

Safari 在处理日期时间的方式上存在一些重大差异。

您只需使用矩库即可绕过它们。

您可以在此处找到文档:https://momentjs.com/

moment 适用于 safari 以及所有其他常见和当前的浏览器。

【讨论】:

  • 我找到了解决方案; var cacheDateUTC = moment(this.state.dataDate + "Z").format("MM/DD/YYYY, LTS"); .谢谢@simon-echle
  • 不客气!
  • 使用有效的日期时间字符串会比为此添加一个大型库要好得多。
【解决方案2】:

“2019-10-15 11:59:27”不是 ECMA-262 支持的格式,因此解析取决于实现。 Safari 将其视为对其中一种受支持格式的错误尝试,因为缺少“T”,因此它返回无效日期。

支持的格式要求日期和时间组件之间有一个“T”,因此符合“2019-10-15T11:59:27”。

但是,这应该被视为本地,但 Safari 将其视为 UTC。

底线是不依赖内置解析器,始终手动解析时间戳(时间值可能除外,它可以作为数字直接传递给构造函数)。

另见Why does Date.parse give incorrect results?

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2020-03-02
    • 2019-02-11
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多