В настоящее время я работаю над методом, в котором система должна автоматически вызывать клиента в его часовом поясе.
Допустим, если клиент находится в часовом поясе «Африка/Блантайр», а я в часовом поясе «Азия/Джакарта», и клиент говорит вызвать в 7 часов вечера, тогда мне нужно будет сохранить время в БД, и система должна вызвать его.
Метод, о котором я подумал, состоит в том, чтобы получить смещение между двумя часовыми поясами («Африка/Блантайр» и «Азия/Джакарта»), а затем получить 7 часов вечера в «Азия/Джакарта», наконец, добавить/вычесть смещение ко времени, и это как я получу 7 часов вечера для "Африки/Блантайр". Но я не уверен, как я могу реализовать это?
Я думаю, вы можете получить данные о разнице во времени через этот сайт. Что касается способа, то можно сделать json-файл, через который добавить все страны и их время, либо через апи, его вы найдете через один из сайтов расчета разницы во времени и расчета часового пояса
https://www.calculator.net/time-zone-calculator.html
Есть ли способ сделать это с помощью простого JS или временного часового пояса?
Это должен быть комментарий, это не ответ. См. примечание внизу страницы: "Этот калькулятор часовых поясов не учитывает летнее время в своих расчетах.".
Ты сможешь:
Внутри объект момента использует экземпляр встроенного объекта Date, который имеет значение времени ECMAScript, представляющее отдельный момент времени как смещение от эпохи ECMAScript (1 января 1970 г.). Изменение часового пояса просто меняет расчеты для управления и отображения даты, но не меняет значение времени.
Таким образом, после установки часового пояса на Африка/Блантайр установка времени на 19:00 устанавливает его на 19:00 в Блантайре. Изменение часового пояса на Джакарту также не меняет базовое значение времени, это просто означает, что сгенерированная временная метка предназначена для Джакарты.
Итак, вот код:
// First get a moment for "now"
let mBlantyre = moment();
// Set the timezone to Africa/Blantyre
mBlantyre.tz('Africa/Blantyre');
// Set the time to 7 pm
mBlantyre.startOf('day').hour(19);
// Copy the moment object
mJakarta = moment(mBlantyre);
// Set the timezone to Asia/Jakarta
mJakarta.tz('Asia/Jakarta');
// Display as timestamps
console.info(
'Africa/Blantyre: ' + mBlantyre.format() +
'\nAsia/Jakarta : ' + mJakarta.format()
);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.34/moment-timezone-with-data-10-year-range.min.js"></script>
Кажется, вам нравится использовать момент-часовой пояс, поэтому прочитать документацию. Буквально самая первая строка примера кода отвечает на первую часть вашего вопроса. Второй пример отвечает на вторую часть. Так что напишите код и посмотрите, что произойдет. Напишите вопрос, если у вас возникли проблемы.