Почему время create_at, сгенерированное из mongodb, отличается от фактического местного времени?

#node.js #mongodb #datetime #timezone

Вопрос:

Теперь я использую функцию created_at по умолчанию, предоставленную nodejs и mongodb.

Но дело в том, что фактическое время, которое я создал, отличается от значения, возвращаемого сервером при создании.

  {
                "_id": "615dbc9580b0913c58e32f41",
                "createdAt": "2021-10-06T15:11:17.740Z",
                "note": "I discount because i am bored",
                "services": [
                    null,
                    null
                ],
                "items": [],
                "total_amount": 12000
            }
 

В приведенном выше примере время , которое я создал, 2021-10-06 10:10pm немного отличается от времени даты возврата 2021-10-06T15:11:17.740Z , и как я могу изменить это поведение

Комментарии:

1. Вы смотрите не на ту запись? Mongodb, конечно, не устанавливает это поле само по себе. Какую бы ценность вы ни видели, она была предоставлена приложением.

2. по местному времени чего? сервер? ваша клиентская машина? Вы уверены, что сервер имеет тот же часовой пояс, что и ваша клиентская машина, или где бы вы ни сравнивали местное время?

3. mongodb любит сохранять данные даты и времени в формате UTC. Значение createdAt указано в зулусском времени — вы можете это определить, потому что оно заканчивается буквой » Z » — 2021-10-06T15:11:17.740 Z. Ваше местное время будет компенсировано часовым поясом, в котором вы живете. Если вы столкнетесь с датой и временем с определенным смещением, это будет очевидно — например, 2021-10-06T10:11:17.740-5:00

Ответ №1:

Если вы находитесь в часовом поясе Америка/Лос-Анджелес (Тихоокеанское летнее время в начале октября), ваше время 2021-10-06 22:10 совпадает с 2021-10-06T15:10Z -Z означает UTC.

Итак, если ваш диагноз временного сдвига верен, то между часами, которые вы использовали для определения 10:10pm времени, и часами, которые использовались для создания метки времени в вашем объекте, разница в одну минуту семнадцать секунд.

Честно говоря, это кажется маловероятным. В наши дни довольно сложно настроить сервер без синхронизации времени NTP.

Комментарии:

1. Тихоокеанское летнее время-UTC-7, поэтому 10 вечера PDT будет в 5 утра по Гринвичу на следующий день. Отмеченное время указывает на Восточную Азию.