通过忽略夏令时javascript将日期转换为UTC

时间:2016-10-26 11:58:32

标签: javascript jquery date momentjs dst

我在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

2 个答案:

答案 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());

相关问题