以下输出的时间比输入的时间少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;
答案 0 :(得分:1)
当您忽略 ISO 8601 格式化日期时间结束时的时区信息时,大多数计算机实施默认为+0000
,这意味着日期将2015-07-09T14:18:12.430
解释为与2015-07-09T14:18:12.430+0000
或2015-07-09T14:18:12.430Z
看起来您希望将其解释为当地时间而不是UTC,您有3个选项
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:12
和0400 (EDT)
。由于你想在GMT之后删除所有内容,你只需使用数组的0索引中的元素
我误解了这个问题。如果您使用X.toUTCString(),它可能会解决您的问题。