На ваш вопрос нелегко ответить.Для меня непонятно, как ваши куски кода висят вместе или что именно они представляют.Поэтому я думаю, что лучше всего начать с некоторых общих практических определений.
Внутренний часовой пояс
«Внутренний часовой пояс» - это часовой пояс, используемый вами внутри вашего кода PHP, вашей базы данных, твой сервер и тд.Везде.Вам нужно выбрать один.Наиболее логичный выбор - UTC, но подойдет любая другая зона, если вы будете ее придерживаться.Наличие одного внутреннего часового пояса означает, что вам никогда не придется делать какие-либо преобразования из одного пояса в другой.
Внешний часовой пояс
«Внешний часовой пояс» - это часовой пояс, который вы используете для представления дат ираз для ваших посетителей.Как вы правильно поняли, внешнее время - это, в некоторой степени, перевод вашего внутреннего времени.Это преобразование должно быть сделано на уровне представления вашего приложения.Таким образом, только в самый последний момент внутреннее время будет преобразовано во внешнее.
Преобразование с помощью PHP
Вы можете конвертировать время из одной зоны в другую в Javascript, но зачем это делать?Время должно предоставляться PHP либо с использованием времени сервера, либо с помощью поля из базы данных, поэтому имеет смысл использовать PHP для преобразования времени из внутреннего во внешнее.
Это означает, что вам необходимо сохранитьчасовой пояс, выбранный пользователем с вашим приятным пользовательским интерфейсом, таким образом, чтобы он был легко доступен из PHP.Наиболее распространенный способ сделать это - сохранить его в сеансе .Обычно это делается с помощью AJAX-вызова из Javascript в серверную часть PHP. JQuery может облегчить использование AJAX.
Как сказано в комментариях других, лучше всего использовать существующие значения часового пояса .Для внутреннего использования, конечно.Как вы представляете часовой пояс своим пользователям, зависит от вас.
Итак, давайте разберемся с небольшим количеством кода.Предположим, что внутреннее время указано в формате UTC, и у вас есть внутренняя временная строка, например, из вашей базы данных:
$internalTimeStr = '2019-04-12 13:33:20';
Это значение легко преобразовать во время, которое может использовать PHP:
$internalTime = strtotime($internalTimeStr);
И наоборот:
$internalTimeStr = date('Y-m-d H:i:s', $internalTime);
Теперь предположим, что посетитель вашего сайта выбрал «America / New_York» в пользовательском интерфейсе для представления восточного времени.Вы можете использовать этот выбор для преобразования внутреннего времени во внешнее время.
function utc2local($utc,$localTimezone)
{
$dt = new DateTime($utc);
$dt->setTimezone(timezone_open($localTimezone));
return $td->getTimestamp();
}
// we know this
$externalTimezone = 'America/New_York'; // from session / UI
$internalTimeStr = '2019-04-12 13:33:20'; // from database / system
// and this is the conversion
$internalTime = strtotime($internalTimeStr);
$externalTime = utc2local($internalTime,$externalTimezone);
$externalTimeStr = date('Y-m-d H:i:s', $externalTime);
Важно понимать, что это преобразование может быть достигнуто многими способами, и что это только один пример.Убедитесь, что код выполняет то, что вы хотите, прежде чем его использовать.
Причина использования функций, встроенных в PHP, заключается в том, что время трудно , действительно трудно .
Теперь вы можете использовать это внешнее время, чтобы показывать время вашим посетителям.
Заключение
Возможно, это не совсем то, что вы ожидали, но я надеюсь, что это даст вам хорошие подсказки.Использование сессий и AJAX-вызовов - это то, что вы должны выяснить сами, и этот вопрос выходит за рамки этого вопроса.Если у вас есть какие-то конкретные проблемы с ним, вы всегда можете задать другой вопрос.Но попробуйте решить одну конкретную проблему в одном вопросе.