Javascript 带字符串值的Safari新日期与其他时间
我试图做的是将“yyyy-mm-dd HH:mm:ss”字符串更改为日期值 这是当前的代码Javascript 带字符串值的Safari新日期与其他时间,javascript,date,cross-browser,Javascript,Date,Cross Browser,我试图做的是将“yyyy-mm-dd HH:mm:ss”字符串更改为日期值 这是当前的代码 var c = new Date('2019-01-19 23:59:59'.replace(/\s+/g, 'T')) 它回来了 chrome:2019年1月19日星期六23:59:59 GMT+0900(KST) 狩猎:2019年1月20日星期日08:59:59 GMT+0900(KST) ie11:2019年1月19日星期六23:59:59 GMT+0900(KST) 我应该怎么做才能让它在相
var c = new Date('2019-01-19 23:59:59'.replace(/\s+/g, 'T'))
它回来了
- chrome:
2019年1月19日星期六23:59:59 GMT+0900(KST)
- 狩猎:2019年1月20日星期日08:59:59 GMT+0900(KST)
- ie11:
2019年1月19日星期六23:59:59 GMT+0900(KST)
谢谢。为
GMT/UTC
时区的date
字符串添加“Z
”
var c = new Date('2019-01-19 23:59:59'.replace(/\s+/g, 'T')+'Z');
ISO日期可以用附加的小时、分钟和秒写入(YYYY-MM-DDTHH:MM:SSZ):
日期和时间用大写字母T分隔
UTC时间用大写字母Z定义
如果要修改相对于UTC的时间,请删除Z并添加+HH:MM或-HH:MM:
比如说
var d=新日期(“2019-01-19T23:59:59-09:00”) 狩猎。。。在创建具有日期字符串的实例时,它不考虑时区偏移。 在末尾添加
Z
也是一个不错的选择,但是如果你想在其他浏览器中得到同样的结果,应该计算时区偏移量
这就是我所做的
// Before do this, check navigator.userAgent
// and execute below logic if it is desktop Safari.
// Add Z is the convention, but you won't get any error even if do not add.
var c = new Date('2019-01-19 23:59:59Z'.replace(/\s+/g, 'T'))
// It will returns in minute
var timeOffset = new Date().getTimezoneOffset();
// Do not forget getTime, if not, you will get Invalid date
var d = new Date(c.getTime() + (timeOffset*60*1000))
将打开此帖子到明天,等待更好的答案。
谢谢。我需要客户端的解决方案。我将使用此数据实现倒计时UI。非标准字符串的解析依赖于实现。修复方法是不使用内置解析器。这是惯例,但Safari不会返回与其他解析器相同的值。我找到了计算和添加回复的方法。感谢您,虽然这会根据当前时区偏移量调整日期,但它应该使用当前时区偏移量作为日期。不要“检查navigator.userAgent”并推断行为,这是非常糟糕的做法。您可以在两行中将OP格式解析为本地格式,这比上面的代码少一行,并且不会与偏移量混淆。顺便说一句,可以使用解构在一行中解析OP格式。有趣但不推荐:
新日期(…('2019-01-19 23:59:59'.拆分(/\D/).map((x,i)=>i==1?x-1:x))
:-)@在我看来,你的回答比我的更容易接受。你写的代码是这样表述的:新日期('2019','0','19','23','59','59'),我猜。(wondeful bb)。但是我想知道你为什么不推荐这种方式。我还想知道OP
的含义。谢谢你的解决方案!“OP”是“原创帖子”或“原创海报”。我不推荐它,因为它不是特别容易维护或理解的。一个简单的解构任务只需多出一行,而且更清晰。感谢您的快速响应和良好的回答!