我从数据库得到这个日期字符串:
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中获得不同的时间以及如何解决问题?
答案 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上。但是时间会相应地转换。