Как обрабатывать одно и то же значение даты и времени на интерфейсе и в бэкэнде?

#angular

#угловой

Вопрос:

Я создал приложение Angular, в котором есть поле ввода для значения даты и времени. Это значение преобразуется в местное время с Moment.js и сохранен в базе данных. У меня также есть размещенная виртуальная машина с консольным приложением, которое проверяет это время и время, равное или меньшее, чем текущее.Сейчас», а затем отправляет электронное письмо.

Проблема в том, что я не хочу использовать «Дата-время».Теперь», потому что дату может ввести любой человек в любой стране, а виртуальная машина имеет другой часовой пояс и/или дату, установленную на компьютере, поэтому, на мой взгляд, процесс будет выглядеть следующим образом:

Пользователь А из Нью-Йорка, поэтому при вводе даты (пример: понедельник, 5 декабря 2021 года, 8:00 утра) Дата сохраняется в качестве этого значения. И виртуальная машина размещена где-то в Европе, где текущее время 11 вечера в тот же день, но консольное приложение должно считывать значение даты у пользователя, который живет в Нью-Йорке, и должно проверять текущее время в Нью-Йорке.

Как я могу этого добиться? Должен ли я отправить название часового пояса во внешнем приложении и сохранить эту информацию в отдельном поле или мне следует сохранить дату в другом формате? И какую библиотеку я могу использовать в приложении для внутренней консоли, чтобы проверять текущее время для страны, в которой живет пользователь?

Ответ №1:

Вы можете использовать формат даты ISO. Это хорошо работает с часовым поясом. Просто используйте new Date(isoTime) , где isoTime значение в формате ISO, вот так: 2021-11-29T15:43:27.626Z . Когда вы это делаете, браузер клиента проверяет часовой пояс для вас и отображает правильное время для пользователя.

И с другой стороны, вы можете преобразовать любое местное время в UTC, просто используйте new Date().toISOString() . Вместо этого вы должны разместить new Date() здесь значение даты.

Тебе это не нужно moment .

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

1. Итак, я сделал это, как вы предложили, и ввел дату интерфейса и дату бэкенда в UTC. Попросил пару друзей из разных стран попробовать это, и это работает для их местного времени! Спасибо!