Как решить проблему часовых поясов в Node js и mongodb? - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь вставить время начала и окончания, например, логику времени входа и выхода в Mongodb с узла js.Часовой пояс моей локальной системы - IST.Смещение +5: 30 для клиента и сервера.

Итак, следуйте этому примеру.

entryDate: 15-10-2018, 
start: 15-10-2018 01:00:00,
end: 15-10-2018 05:00:00

Теперь, поскольку я нахожусь в одном часовом поясе на клиенте и сервере, он не изменитсямое значение даты и создать новый объект.

Затем я сохраняю эти данные в MongoDB.Как вы знаете, mongo db преобразует дату в UTC, а затем сохраняет ее.Так что в моей БД это будет выглядеть так:

entryDate: ISODate("2018-10-15T00:00:00Z"), 
start: ISODate("2018-10-14T19:30:26Z"),
end: ISODate("2018-10-14T23:30:26Z")

Так что теперь, если я хочу найти запрос, который должен дать мне записи для дат и времени между 15 и 16, скажем, тогда я не получу никакихdata.

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

Теперь разница здесь в том, что когда я хочу найти диапазон дат в часовом поясе IST, тогда он даст мне точную дату дляВыполните поиск (15-10-2018 00:00:00) по (16-10-2018 00:00:00).

Где на сервере он преобразует эту дату в UTC и может дать мне один деньменьше или может быть больше времени, как (14-10-2018 18:30:00) до (15-10-2018 18:30:00).Так что с самого начала мой запрос неверен.

Так как решить эту проблему?Спасибо.

1 Ответ

0 голосов
/ 17 октября 2018

После проведения некоторых исследований.У меня есть решение.

  1. Получите вашу дату на стороне клиента.
  2. Преобразование этой даты в дату UTC и передачу строки даты на сервер.Как 01-01-2018 10:00:00.(Примечание: мы просто конвертируем дату, а не часовой пояс)
  3. На стороне сервера создайте объект даты из предоставленной даты, который будет конвертировать дату в UTC по умолчанию с тем же временем.
  4. Сохранение даты на стороне сервера с MongoDB.Поскольку дата указана в формате UTC, она не будет снова преобразовываться и сохраняться как есть.
  5. Теперь с сервера вы получите дату в формате UTC, которая будет выглядеть как '2018-01-0110:00:00' .
  6. Теперь на стороне клиента создайте объект даты с этой даты.Это преобразует вашу дату в фактическую дату, которую вы прошли.

Это решило мою проблему.

...