解决将字符串日期转换为日期对象的问题。

时间:2016-07-19 15:09:50

标签: javascript

我从数据库得到这个日期字符串:

var MeasureDateStr = "2016-07-19T16:29:31";

在客户端,我从MeasureDate值创建datetime javascript对象:

var measureDate = new Date(MeasureDateStr);

创建measureDate对象后,内容为:

var measureDate = Tue Jul 19 2016 19:29:31 GMT+0300 (Jerusalem Daylight Time);

如您所见,我的原始日期字符串的时间(+3小时)不同。

我的问题是为什么我在measureDate中获得不同的时间以及如何解决问题?

3 个答案:

答案 0 :(得分:0)

您获得用户本地时间,因为您无需告诉浏览器在哪个时区查看。

如果您想拥有UTC时间,只需在时间结束时添加Z:

var MeasureDateStr = "2016-07-19T16:29:31Z";

这也可能有所帮助: How to ISO 8601 format a Date with Timezone Offset in JavaScript?

答案 1 :(得分:0)

这是因为您的浏览器时区设置为GMT + 3。由于您没有在日期字符串中指定时区,因此会自动添加3个小时。

编辑:

var d = '2016-07-19T16:29:31';
var offset = new Date().getTimezoneOffset() * 60 * 1000; // get Timezone offset in milliseconds.
d = new Date(Date.parse(d) + offset) // Remove the timezone offset.

console.log(typeof d); // object
console.log(d); // Tue Jul 19 2016 16:29:31 GMT+0200 (CEST)

旧答案:

new Date('2016-07-19T16:29:31').toUTCString()

答案 2 :(得分:0)

你确定吗? 您要报告的字符串是本地时间字符串。

如果我运行您的示例,我会收到Tue Jul 19 2016 16:29:31 GMT+0200 (ora solare Europa occidentale),因此会保留本地时间,同时附加时区。

如果您添加Z或时区指示(如2016-07-19T16:29:31+03:00),则可以准确指定所需的行为。

请注意,当您记录日期时,即使使用其他时区指定日期,您也将始终获得本地格式:

var MeasureDateStr = "2016-07-19T16:29:31+03:00";
var measureDate = new Date(MeasureDateStr); 
console.log(measureDate);

我得到Tue Jul 19 2016 15:29:31 GMT+0200 (ora solare Europa occidentale),因为我在GMT + 2上。但是时间会相应地转换。