Я задал очень похожий вопрос раньше, но не получил ответов, которые помогли.
У меня есть сайт, который позволяет пользователям размещать заметки. На этих заметках будет отметка времени. Часовой пояс по умолчанию на моем сервере EST5EDT
(несмотря на то, что я устанавливаю date.timezone
на что-то другое, что является другой проблемой!).
Насколько я могу собрать, лучше всего установить временную метку времени сервера и преобразовать ее для каждого пользователя. Например:
User 1 (GMT) posts "Hello World" at (local time) 5:00 (server time) 0:00 User 2 (AEST, +10) sees that User 1 posted "Hello World" at (local time) 15:00
Для аргументации я избегаю беспокойства о DST, поскольку я не думаю, что это имеет значение для этого.
Я понимаю, что я могу использовать date_default_timezone_set()
в своем приложении, но я совершенно уверен, что я должен установить время публикации как время сервера, поэтому не нужно менять установленный часовой пояс.
Я хочу только преобразовать время для просмотра
"Post as Server Time, Read as Local Time"
Я не верю, что я первый человек, у которого было приложение для веб-приложений, поэтому должен быть ответ.
Мне нужно будет получить дату, когда сообщение было создано, получить часовой пояс пользователя, просматривающего сообщение (возможно, через javascript, так как php использует дату и время на стороне сервера) и преобразовать дату-время с использованием часового пояса пользователя.
getTimezoneOffset()
в javascript будет определять разницу во времени пользователей с UTC, но не с моего сервера.
Что вы можете сделать, это сохранить время UTC при сохранении и при просмотре показать время UTC + смещение. Все это можно сделать с помощью JS на стороне клиента.
Метод JS, используемый при сохранении = UTC()
Метод JS, используемый при отображении =
<html> <head> <script type="text/javascript"> function showDateInClientSideFormat(dValue) { var d = new Date() var n = d.getTimezoneOffset(); var dateClientSide = new Date(dValue +n); return dateClientSide; } </script> </head> <body> <?php echo '<script> showDateInClientSideFormat($dateSaved); </script>'; ?> </body> </html>
PS: время UTC совпадает с временем GMT
Вы можете использовать PHP DateTime и DateTimeZone для преобразования даты и времени в текущий часовой пояс пользователей:
http://www.php.net/manual/de/class.datetime.php
http://www.php.net/manual/de/class.datetimezone.php
$date = new DateTime($dateTimeFromDB); $date->setTimeZone( new DateTimeZone('User/Timezone') ); echo $date->format('dmY H:i');