代码之家  ›  专栏  ›  技术社区  ›  Juneyoung Oh

带有字符串值的Safari新日期在不同时间外[重复]

  •  1
  • Juneyoung Oh  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我要做的是将“yyyy-mm-dd hh:mm:ss”字符串更改为日期值。

    这是当前代码

    var c = new Date('2019-01-19 23:59:59'.replace(/\s+/g, 'T'))
    

    它返回

    • 铬: Sat Jan 19 2019 23:59:59 GMT+0900 (KST)
    • 游猎: Sun Jan 20 2019 08:59:59 GMT+0900 (KST)
    • IE11: 2019年1月19日星期六23:59:59 GMT+0900(kst)

    我该怎么做才能让它返回相同的日期?

    谢谢。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Rahul Harmalkar    6 年前

    添加 Z date 字符串 GMT/UTC 时区

    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”);

        2
  •  -1
  •   Juneyoung Oh    6 年前

    游猎。。。在使用日期字符串创建实例时,它不考虑时区偏移量。

    添加 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))    
    

    会把这篇文章打开到明天等待更好的答案。 谢谢。