阻止JavaScript将时间更改为GMT

时间:2015-07-09 19:38:55

标签: javascript date datetime time

以下输出的时间比输入的时间少4小时:



X = new Date('2015-07-09T14:18:12.430')
$('body').append(X)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

当您忽略 ISO 8601 格式化日期时间结束时的时区信息时,大多数计算机实施默认为+0000,这意味着日期2015-07-09T14:18:12.430解释为与2015-07-09T14:18:12.430+00002015-07-09T14:18:12.430Z

相同

看起来您希望将其解释为当地时间而不是UTC,您有3个选项

  1. 将您的本地时区偏移附加到结尾
  2. 以不同方式编写,以便按预期进行解析
  3. 使用第一个日期
  4. 的UTC字段中的详细信息创建第二个日期
    function myParser(iso_style) {
        var d = new Date(iso_style);
        return new Date(
            d.getUTCFullYear(),
            d.getUTCMonth(),
            d.getUTCDate(),
            d.getUTCHours(),
            d.getUTCMinutes(),
            d.getUTCSeconds(),
            d.getUTCMilliseconds()
        );
    }
    

    如果时间跨越可能会改变该偏移的日期,则您无法根据您的本地偏移进行调整,因为您会遇到意外行为。夏令时的边界

    由于Salman A&#39; s answer指出当前ES 6 Draft定义了省略的时区应被解释为客户端的本地时区。这将导致行为不一致,因为不同的 JavaScript 实现会进行转换,所以我强烈建议您在编写 ISO 8601 始终使用时区。

答案 1 :(得分:1)

如果不指定时区:

ECMAScript-5 compliant browsers will assume UTC timezone

  

缺席时区偏移的值为“Z”。

ECMAScript-6 compliant browsers will assume local timezone

  

如果不存在时区偏移,则将日期时间解释为a   当地时间。

使用假设当地时区的long Date constructor

var X = new Date(2015, 7 - 1, 9, 14, 18, 12, 430);
alert(X);

答案 2 :(得分:0)

快速而肮脏的解决方法:

X = new Date('2015-07-09T14:18:12.430');
$('body').append( X.toString().split('GMT')[0] );

它的工作原理是将日期对象转换为字符串,然后将其拆分为模式GMT周围的数组。因此,数组中有2个元素:Thu Jul 09 2015 10:18:120400 (EDT)。由于你想在GMT之后删除所有内容,你只需使用数组的0索引中的元素

我误解了这个问题。如果您使用X.toUTCString(),它可能会解决您的问题。