2016-10-26 3 views
0

Я нахожусь в часовом поясе GMT ​​+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 часа стандартного турецкого времени) (вычитается -1 DST) Я хочу вычитать дату в UTC, не учитывая DST, и в нашем случае мое ожидание - получить час как «16:00», а не «15:00» "

Как скопировать дату в UTC без учета летнего времени. будет полезно любое решение с использованием js или jquery. Я тестирую на хроме.

при просмотре через несколько ссылки он говорит new Date() даст в зимнее время и не считает рассмотрение перехода на летнее время, но это я не наблюдал и создал бухнуться воспроизвести 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());