#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. Попросил пару друзей из разных стран попробовать это, и это работает для их местного времени! Спасибо!