2016-10-26 129 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());