$dt = new DateTime('tomorrow 09:00:00');
echo $app->make('helper/form/date_time')->datetime('dt', $dt, false, true, null, 1800, array());
показывает правильную дату и время, только если время системного сервера такое же, как у пользователя, например локальный. Но если сервер и пользователь находятся в разных часовых поясах, $ dt на стороне пользователя уже не тот.
Я также попробовал:
$dt = $dh->formatDateTime(date("Y/m/d H:i:s"), false, false, 'user');
который показывает текущую дату и время пользователя, но как только я что-то там изменяю (например, добавление дня, времени или чего-то еще, он возвращается к дате и времени сервера).
Например, приведенное выше показывает сегодняшнее 17/08/18 1:00 (правильное время пользователя сейчас), но
$dt = $dh->formatDateTime(date("Y/m/d H:i:s", strtotime("tomorrow 9:00")), false, false, 'user');
показывает 18/08/18 1:00, что составляет 9:00 — 10 ч для часового пояса = время сервера.
Как я могу показать точную дату и время (завтра 9:00) как пользователя, а не как у системы?
Вы можете использовать следующее решение:
// frontend
<script> timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; </script>
Это даст вам часовой пояс браузера в timezone
, Вы должны передать это бэкэнду и использовать его, чтобы настроить время для пользователя. Ниже значение timezone
выше был сохранен в $timezone
,
// backend
$time = new \DateTime('now');
$time->setTimezone(new \DateTimeZone($timezone));
Других решений пока нет …