我在GMT +2时区和夏令时上。
我的要求是询问用户日期并将其转换为UTC而不考虑DST。
当我console.log(new Date()),
时
它给了我"Wed Oct 26 2016 18:00:00 GMT+0300 (Turkey Daylight Time)"
我想向服务器发送一个UTC格式的日期,服务器将保存在数据库中。
var extractTime = new Date(timeof.edtime); //timeof.edtime contains date given by user.
var d = extractTime.getDate();
var m = extractTime.getMonth();
var y = extractTime.getFullYear();
var h = extractTime.getHours();
var mm = extractTime.getMinutes();
timeof.edtime = moment(new Date(y, m, d, h, mm)).utc().format("YYYY-MM-DD HH:mm");
转换为utc后,timeof.edtime
为"2016-09-26 15:00"
因为它减去3小时才能转到GMT。 (减去标准土耳其时间的2小时)(减去夏令时的-1)
我想通过不考虑DST将日期减去UTC,在我们的情况下,我的期望是将小时变为“16:00”而不是“15:00”
如何在不考虑夏令时的情况下将日期转换为UTC。 任何使用时刻js或jquery的解决方案都会有所帮助。 我正在测试chrome。
通过浏览几个链接,它说new Date()
将在标准时间内给出并且不考虑DST考虑,但这不是我观察和创建的插件重现new Date().toUTCString()
考虑DST,如何避免扣除DST?
https://plnkr.co/edit/tjCOoJqXMHGzCD8B5LdL?p=preview
答案 0 :(得分:0)
试试这个:
+180是GMT + 0300(土耳其)
var x = new Date();
var newdate = new Date();
if((x.getTimezoneOffset()) != 180){
newdate = new Date(x.getTime() + (60000*(x.getTimezoneOffset()+180)));
}
console.log(newdate);
答案 1 :(得分:0)
受this answer的启发,您可以按如下方式进行时间校正:
function compensateDST(dt) {
var janOffset = new Date(dt.getFullYear(), 0, 1).getTimezoneOffset();
var julOffset = new Date(dt.getFullYear(), 6, 1).getTimezoneOffset();
var dstMinutes = dt.getTimezoneOffset() - Math.max(janOffset, julOffset);
dt = new Date(dt);
dt.setMinutes(dt.getMinutes() - dstMinutes);
return dt;
}
// Use your date here:
var extractTime = new Date('2016-10-26 18:00');
// Truncate to minute precision:
var extractTime = new Date(extractTime.getTime() - extractTime.getTime() % 60000)
console.log('Local time:', extractTime.toString());
console.log('UTC time before correction:', extractTime.toISOString());
// Compensate for the DST shift:
var extractTime = compensateDST(extractTime);
console.log('UTC time after correction:', extractTime.toISOString());