jquery Safari和Chrome上的不同日期

mpbci0fu  于 2023-04-20  发布在  jQuery
关注(0)|答案(2)|浏览(92)

给定字符串格式的日期,我试图在浏览器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)(错误)

yeotifhr

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之前或之后的本地时间)|

yws3nbqq

yws3nbqq2#

我遇到了一个渐进式的应用程序,它的工作完美的Android不是在iOS.我发现Safari的问题.为了得到同样的结果,我发现了这个问题,并修复了它.
在safari中,它需要这样的日期格式yyyy/mm/dd而不是yyyy-mm-dd。因此,替换日期格式,我在chrome和safari中得到了相同的结果。
你不需要在最后用Z替换空格或添加T。它只是修复了无效日期问题,但不会显示与Chrome相同的结果。

var test = new Date('2019-11-15 23:43:22'); // Invalid Date
alert(test);

var testTwo = new Date('2019-11-15 23:43:22'.replace(/-/g, '/')); // works same as chrome
alert(testTwo);

2019年11月15日星期五23:43:22 GMT+0530(IST)

我仍然不太清楚Safari中的日期,但这对我来说很有魅力。

相关问题