Каким образом изменить и отобразить время работы для клиента? JS/PHP
Имеется следующее:
<div>Время работы с
<div id="from">08:00</div> до <div id="to">14:00</div>
</div>
Хочу добиться изменения времени, посредством JS или PHP, указав основной timezone +3,получается когда клиент из другого города зайдет на сайт и у него будет timezone+6 (к примеру) то время с 08:00 до 14:00 будет изменен в зависимости от timezone клиента учитывая указанное мною timezone +3,прошу помочь.
Ответы (1 шт):
Создайте в JS дату из UTC-времени, и выведите её в свой div:
document.getElementById('from').innerHTML = new Date(Date.UTC(2022, 4, 16, 12, 30, 0))
.toLocaleTimeString('ru-RU', {hour: "numeric", minute: "numeric", timeZoneName: "short"});
У пользователя в браузере стоит правильный timezone - при выводе даты, по нему будет произведена коррекция. В примере вывел с часовым поясом юзера: можно без него, если убрать timeZoneName: "short" - тут уж вам выбирать, как не запутать юзера и не выдавать лишней информации по 100 раз. Если же вы хотите вывести дату именно с определённой тайм-зоной, не смотря на настройку в браузере юзера (например опираясь на настройки юзера в БД на вашем сайте), можно добавить параметр timeZone: "America/New_York", например ( https://stackoverflow.com/a/54453990/3654176 ) .
Дату можно создать напрямую из UTC-timestamp , вот с PHP new Date(<?=time()?>) , или если вы оперируете со строковыми датами, например из БД sql формата вроде "2022-04-16 12:30:00" new Date(<?=strtotime($stringDate)?>) . Только при этом в коде PHP (и в БД) рекомендую использовать всегда UTC - иначе может возникнуть очень неприятная путаница, которую очень долго фиксить.
Ну и в довесок, очень быстро написать плагин, который, например видя аттрибуты элемента data-timestamp="1650116302" и возможно data-date-format="hour:minute timeZoneName" автоматически выводит в элемент скорректированную по tz строку даты-времени. Готовых плагинов честно говоря не знаю, наверное потому что очень быстро написать вручную: но наверняка есть.