Аномалия времени в JavaScript при разборе даты из БД - PullRequest
0 голосов
/ 14 марта 2019

Я сохраняю свои даты в БД и использую datepicker в fontend, и там отображается та же самая дата, которую я выбираю, и у меня есть две удаленные машины, и я запускаю один и тот же код на всех машинах и с На каждой машине разные значения дат собираются в БД. Например, если я выбираю дату 03/01/2019 (мм / дд / гггг). Тогда даты сохраняются как:

2019-02-28 18:30:00.0000000 +00:00  = query created from Indian machine 
2019-03-01 00:00:00.0000000 +00:00  = query created from 2nd country machine
2019-02-28 22:00:00.0000000 +00:00   = query created from 3rd country machine

Как получить выбранную дату, т.е. 03/01/2019

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Это сложная и неизбежная проблема!Как вы говорите, у вас уже есть проблема, потому что часовой пояс уже закрался. Даты всегда должны храниться как полночь UTC в начале рассматриваемой даты, и единственный способ получить это сейчас - это округлить до ближайшей полуночи.,День имеет 86 400 000 миллисекунд.В javascript, округляйте свои даты, как это ...

var ticksAsDays = new Date('2019-02-28 22:00:00.0000000 +00:00').getTime() / 86400000;
var midnightUTC = Math.round(ticksAsDays) * 86400000;
var asADateObject = new Date(midnightUTC);

В дальнейшем обращайте особое внимание на то, что вы обрабатываете только дату, когда не закрадывается представление о времени или часовом поясе, о том, что вашДата - полночный UTC.Гораздо больше информации здесь .

0 голосов
/ 14 марта 2019

Вы должны сохранить дату и время в формате UTC, чтобы преобразовать ее в часовой пояс пользователя. Если вас интересует только сохранение даты, то не нужно конвертировать ее в UTC и хранить только дату, а не время. Я бы порекомендовал вам прочитать эту статью , чтобы узнать ваши требования и использовать решение, которое работает для вас.

...