concrete5 8.4.2 Как отобразить «завтра 09:00:00» в качестве даты и времени пользователя в виджете?

$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) как пользователя, а не как у системы?

0

Решение

Вы можете использовать следующее решение:

// frontend
<script> timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; </script>

Это даст вам часовой пояс браузера в timezone, Вы должны передать это бэкэнду и использовать его, чтобы настроить время для пользователя. Ниже значение timezone выше был сохранен в $timezone,

// backend
$time = new \DateTime('now');
$time->setTimezone(new \DateTimeZone($timezone));
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]