Дата в ответе отличается от MongoDB - PullRequest
1 голос
/ 19 февраля 2020

Я использую Mon goose в качестве клиента MongoDB с Node, и я получаю дату в респонденте с -5: 30 раз.

Дата в БД

"createdAt" : ISODate("2020-02-18T05:17:43.368+05:30"),

Дата в ответе

"createdAt": "2020-02-17T23:47:43.368Z"

Это влияет на данные моих приложений. Есть ли способ получить дату, как она есть в базе данных. Спасибо. Пожалуйста, напишите, если требуется дополнительная информация.

Пн goose Схема

const price = Schema({

}, {
  timestamps: true
})

Запрос

  return Price.find(obj)
  .sort({
    _id: -1
  })
  .limit(parseInt(query.size) || 100)
  .skip((parseInt(query.size) || 100) * (parseInt(query.page) || 0))
  .populate('item')
  .lean()

Сервер timedatectl

Local time: Wed 2020-02-19 12:47:29 IST
Universal time: Wed 2020-02-19 07:17:29 UTC
RTC time: Wed 2020-02-19 07:17:29
Time zone: Asia/Kolkata (IST, +0530)
System clock synchronized: yes
ystemd-timesyncd.service active: yes
RTC in local TZ: no

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

MongoDB хранит даты в виде 64-разрядных целых чисел, что означает, что Mon goose не хранит информацию о часовом поясе по умолчанию, поэтому, когда вы запрашиваете коллекцию на сервере, среда выполнения JavaScript преобразует ваш тег коллекции в часовой пояс вашей ОС. (местный часовой пояс по умолчанию)

Вы можете проверить с помощью

console.log(process.env.TZ)

Поэтому, если вы хотите, чтобы ваш ответ был таким же, как база данных, просто установите часовой пояс на ut c

0 голосов
/ 19 февраля 2020

MongoDB преобразует вашу дату в GMT во время сохранения. Но если вы перенесете дату снова в местный часовой пояс, у вас будет подходящее время.

ISODate находится в UT C.

Браузер конвертирует в местный часовой пояс.

Это нормально для тебя?

z.toUTCString()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...