给定字符串格式的日期,我试图在浏览器safari和chrome中获得相同的结果,但没有成功。我知道这是一个关于这个问题的很多帖子,但我没有得到一个明确的答案
我在用这个密码
new Date("2019-02-21 13:25".replace(/\s/, 'T'))
Chrome的结果
2019年2月21日星期四13:25:00 GMT-0500(东部标准时间)(正确的一个)
Safari的结果
2019年2月21日星期四08:25:00 GMT-0500(EST)
当我使用另一个选项时
new Date("2019-02-21 13:25".replace(/\s/, 'T')+'Z')
Chrome的结果
2019年2月21日星期四08:25:00 GMT-0500(东部标准时间)(错误)
Safari的结果
2019年2月21日星期四08:25:00 GMT-0500(EST)(错误)
2条答案
按热度按时间yeotifhr1#
根据ECMA规范,JavaScript中唯一保证的格式是
YYYY-MM-DDTHH:mm:ss.sssZ
。其他格式取决于浏览器。因此,传递
2019-02-21T13:25Z
将在所有浏览器中按预期工作。(注意结尾的T和Z)https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date-time-string-format
ECMA规格:
21.4.1.18日期时间字符串格式
ECMAScript基于ISO 8601日历日期扩展格式的简化定义了日期-时间的字符串交换格式。格式如下:
YYYY-MM-DDTHH:mm:ss.sssZ
其中要素如下:
| | |
| --------------|--------------|
|
YYYY
|是一年在proleptic格里历作为四个十进制数字从0000到9999,或作为一个扩展的一年“+”或“-”其次是六个十进制数字。||
-
|“-”(连字符)在字符串中出现两次。||
MM
|是一年中的月份,以两位小数表示,从01(一月)到12(十二月)。||
DD
|是月份中的第几天,表示为从01到31的两位小数。||
T
|字符串中出现“T”,表示时间元素的开始。||
HH
|是自午夜以来经过的完整小时数,表示为00到24之间的两位十进制数字。||
:
|“:“(冒号)在字符串中出现两次。||
mm
|是自小时开始后的完整分钟数,表示为00到59之间的两位十进制数字。||
ss
|是从分钟开始算起的完整秒数,表示为00到59之间的两位十进制数字。||
.
|“.”(点)按字面意思出现在字符串中。||
sss
|是自秒开始以来的完整毫秒数,表示为三位十进制数字。||
Z
|是UTC偏移量表示形式,指定为“Z”(表示没有偏移量的UTC)或“+”或“-”,后跟时间表达式HH:mm
(时区偏移量字符串格式的子集,用于分别指示UTC之前或之后的本地时间)|yws3nbqq2#
我遇到了一个渐进式的应用程序,它的工作完美的Android不是在iOS.我发现Safari的问题.为了得到同样的结果,我发现了这个问题,并修复了它.
在safari中,它需要这样的日期格式yyyy/mm/dd而不是yyyy-mm-dd。因此,替换日期格式,我在chrome和safari中得到了相同的结果。
你不需要在最后用Z替换空格或添加T。它只是修复了无效日期问题,但不会显示与Chrome相同的结果。
2019年11月15日星期五23:43:22 GMT+0530(IST)
我仍然不太清楚Safari中的日期,但这对我来说很有魅力。