Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么新日期(dateString)在不同的设备上以完全相同的输入返回两个不同的日期? 知道我的时区是GMT + 2,考虑下面的代码:_Javascript_Date_Phonegap - Fatal编程技术网

Javascript 为什么新日期(dateString)在不同的设备上以完全相同的输入返回两个不同的日期? 知道我的时区是GMT + 2,考虑下面的代码:

Javascript 为什么新日期(dateString)在不同的设备上以完全相同的输入返回两个不同的日期? 知道我的时区是GMT + 2,考虑下面的代码:,javascript,date,phonegap,Javascript,Date,Phonegap,在自拍4G手机上运行: myDate = "2017-05-12T09:00:00"; dateFoo = new Date(myDate); // Fri May 12 2017 11:00:00 GMT+0200 (CEST) 在Galaxy S7上运行: myDate = "2017-05-12T09:00:00"; dateFoo = new Date(myDate); // Fri May 12 2017 09:00:00 GMT+0200 (CEST) 为什么输出中存在

在自拍4G手机上运行:

myDate = "2017-05-12T09:00:00";
dateFoo = new Date(myDate); //  Fri May 12 2017 11:00:00 GMT+0200 (CEST)
  • 在Galaxy S7上运行:

    myDate = "2017-05-12T09:00:00";
    dateFoo = new Date(myDate); //  Fri May 12 2017 09:00:00 GMT+0200 (CEST)
    
  • 为什么输出中存在不一致性?我将如何着手解决它


    我的问题不同于其他类似的问题(例如),因为在我的例子中,我使用的是完全相同的字符串,不同的是设备

    最初的问题是,一台设备上的Date.parse以我的本地时间为时区,而另一台设备上则以UTC为时区

    通过在初始日期字符串的末尾添加一个Z,我强制日期始终被视为UTC,无论设备是什么,因此实现了与date.parse()一致的结果


    为了得到我当地时间的日期,我使用了这个问题的答案:。

    日期的差异是因为时区。 您可以尝试将日期转换为UTC日期,以获得这样完美的结果

        myDate = "2017-05-12T09:00:00";
        dateFoo = new Date(myDate).toUTCString();
    

    另一个可能的重复:我不认为这是与@4castle错误的重复-这个问题中的日期看起来像格式良好的ISO日期,尽管没有明确的时区。@尖锐的是,输入可能格式良好,但
    日期
    解析器的实现没有标准化,这就是造成任何不一致的原因。我要说的是,永远不要使用
    Date.parse
    new Date
    来解析不是来自
    Date.toString()
    的日期字符串,因为标准是不确定的,无论您使用什么浏览器或设备,它首先不应该是一致的。@Pointy-ECMA-262不需要时区,因此“2017-05-12T09:00:00”与标准一致,应被视为“本地”。尽管依赖内置的日期解析器是个糟糕的主意,但我不建议您将其作为永久解决方案。有人说,使用
    newdate
    date.parse
    解析日期是一种不好的做法,因为在ES6之前,浏览器实现不一致。如果希望得到一致的结果,建议您使用第三方日期解析库。(例如)。谢谢,在我的例子中,有很多不同的设备,所以我一定会看一看。js.Appending Z是个坏主意。“2017-05-12T09:00:00”应解析为本地,但附加Z将解析为UTC。底线是永远不要使用内置解析器,而是使用函数或库。链接的答案()是错误的。在我的例子中,添加Z允许在不同的设备之间保持一致的行为,因此允许我应用时区调整,而不必担心设备是否具有不同的解析日期。“2017-05-12T09:00:00”不是UTC。是的,我知道这不是UTC,我将转换为“2017-05-12T09:00:00”字符串转换为UTC格式