var dateInCST; //Getting CST date as input.
/*Triming the time part and retaining only the date.*/
var onlyDateInCST = new Date(dateInCST.getUTCFullYear(), dateInCST.getUTCMonth(), dateInCST.getUTCDate());
console.log(onlyDateInCST);
Я нахожусь в +5:30, то есть в часовом поясе IST.
Во время создания даты, указав год, месяц и дату, узел js обрабатывает ее как IST и автоматически вычитает -5: 30.
Node js автоматически конвертирует дату в UTC, считая, что дата находится в часовом поясе сервера. Но в браузере я получаю правильную дату CST без времени.
Пример :
var today = new Date(2017, 2, 7);
console.log(today);
Дата должна быть 2017-03-07T00: 00: 00.000Z. Но node js вычитает разницу часовых поясов сервера между UTC, т.е. +5: 30 от этой даты, и объект даты становится 2017-03-06T18: 30: 00.000Z
Почему приведенный выше код в Node js отличается от браузера. Какое-либо обходное решение для этого?
Редактировать :
var date = new Date();
function createDateAsUTC(date) {
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
}
console.log(date);
console.log(createDateAsUTC(date));
Вывод NodeJs:
2017-03-08T12:28:16.381Z
2017-03-08T17:58:16.000Z
Вывод в браузере:
8 марта 2017 г., среда, 17:58:17 GMT + 0530 (индийское стандартное время)
Ср, 8 марта 2017 г., 23:28:17 GMT + 0530 (индийское стандартное время)
Существует разница между поведением Node js и браузером. Время на сервере (местное) было 17:58.
В чем разница между новой датой (?,?,?,?,?,?) И новой датой (Date.UTC (?,?,?,?,?,?))?
console.log(dateInCST);
? Вы получаете ту же дату, что и отправляете? - person Anthony C   schedule 06.03.2017dateInCST
, используя только объектDate
. ОбъектDate
для внутреннего использования всегда является UTC и использует местный часовой пояс для преобразований ... Вы можете сделать это с помощью moment.js, но не сыройDate
. - person Matt Johnson-Pint   schedule 07.03.2017