2016-10-26 102 views
0

我在格林威治标准时间+2时区和夏令时开启。忽略夏令时转换为UTC日期时间javascript

我的要求是询问用户一个日期并将其转换为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小时的标准土耳其时间)(减去DST的-1) 我想通过不考虑DST来减去UTC的日期,在我们的情况下我的期望是将小时变为“16:00”而不是“15:00 “

如何在不考虑夏令时的情况下将日期转换为UTC。 任何使用js或jquery的解决方案都会有所帮助。 我正在测试铬。

通过浏览几个链接它说new Date()会给在标准时间,并不考虑DST的考虑,但这不是我观察到并创建plunk重现new Date().toUTCString()考虑DST以及如何避免DST的减法? https://plnkr.co/edit/tjCOoJqXMHGzCD8B5LdL?p=preview

+0

你需要时间吗?如果没有,请使用12:00:00 – mplungjan

+0

@mplungjan我不明白你的意思。我对日期和时间都感兴趣,因为转换为utc可以在前一天或之后改变,时间肯定会影响。所以时间和日期对我来说都很重要。 – Rahul

回答

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