Javascript新日期()/UTC-GMT跨浏览器

Javascript新日期()/UTC-GMT跨浏览器,javascript,date,datetime,Javascript,Date,Datetime,问题: IE10-IE11中新日期()的不同格式。 Javascript: IE 11/Chrome: var m = new Date("2014-07-04T04:00:00"); console.log(m); // Fri Jul 04 2014 06:00:00 GMT+0200 (W. Europe Summer Time) IE 10: var m = new Date("2014-07-04T04:00:00"); console.log(m); // Fri Jul 4

问题: IE10-IE11中新日期()的不同格式。 Javascript:

IE 11/Chrome:

var m = new Date("2014-07-04T04:00:00"); 
console.log(m); // Fri Jul 04 2014 06:00:00 GMT+0200 (W. Europe Summer Time) 
IE 10:

var m = new Date("2014-07-04T04:00:00"); 
console.log(m); // Fri Jul 4 04:00:00 UTC+0200 2014 

是否可以使用一个环来管理所有的日期?

您不应该将字符串传递给
新日期
,特别是出于这个原因

相反,您应该给它单独的参数:

new Date(2014, 6, 4, 4, 0, 0); // remember months are zero-based
或者,如果要以UTC为单位给出时间,请尝试:

var d = new Date();
d.setUTCFullYear(2014);
d.setUTCMonth(6);
d.setUTCDate(4);
d.setUTCHours(4);
d.setUTCMinutes(0);
d.setUTCSeconds(0);
d.setUTCMilliseconds(0);
当然,您可以创建一个函数来实现这一点

或者,如果您有时间戳,您可以简单地执行以下操作:

var d = new Date();
d.setTime(1404446400000);

完成一点答案。给出的UTC示例是危险的,因为您在5月31日(或本月任何其他31日)执行以下操作:

var d = new Date();
d.setUTCFullYear(2014);
d.setUTCMonth(5);
d.setUTCDate(4);
d.setUTCHours(4);
d.setUTCMinutes(0);
d.setUTCSeconds(0);
d.setUTCMilliseconds(0);
它将制作“2014年7月4日04:00:00”

因此,您更喜欢函数:

new Date(Date.UTC(2014, 5, 4, 4, 0, 0, 0))

它将生成“2014年6月4日04:00:00”。

是的,使用moment.js:为保持行为一致,请在字符串中包含时区。问题在于浏览器供应商之间对于不存在时区时应该假定哪个时区的看法不同。为什么危险?我在谷歌ChromeAs中得到了
“2014-06-04T04:00:00.000Z”
“如果您在5月31日(或任何其他月的31日)执行创建日期,则创建日期将以31日为月日,当您切换到没有31日的第5个月时,它会将月数增加1,并将其设为第1天。所以实际上你设定了错误的月份。如果您将操作顺序更改为先设置日期,然后设置月份,您将进入相同的情况。这就是为什么JS Date()加上对它的命令式操作是一种危险的做法。