Преобразование даты в UTC, игнорируя javascript перехода на летнее время

Я нахожусь в часовом поясе GMT ​​+2 и переходе на летнее время.

Мое требование - задать пользователю дату и преобразовать ее в UTC без учета летнего времени.

когда я делаю 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 летнего времени) Я хочу вычесть дату из UTC, не учитывая летнее время, и в нашем случае я ожидаю, что час будет "16:00", а не "15:00"

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

просматривая несколько ссылок, он говорит, что new Date() будет давать в стандартное время и не учитывает летнее время, но я этого не заметил и создал планку для воспроизведения new Date().toUTCString() также учитывать летнее время, как избежать вычитания летнего времени? https://plnkr.co/edit/tjCOoJqXMHGzCD8B5LdL?p=preview


person Rahul    schedule 26.10.2016    source источник
comment
Вам нужно время? Если нет, используйте 12:00:00   -  person mplungjan    schedule 26.10.2016
comment
@mplungjan Я не понял, что ты хочешь сказать. Меня интересуют дата и время, поскольку преобразование в UTC может измениться за день до или после, и время определенно повлияет. поэтому время и дата важны для меня.   -  person Rahul    schedule 26.10.2016


Ответы (2)


Вдохновленный этим ответом, вы можете сделать коррекцию времени следующим образом:

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

person trincot    schedule 26.10.2016

попробуй это:

+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);
person HudsonPH    schedule 26.10.2016