пользователей для просмотра в локальном часовом поясе

Я задал очень похожий вопрос раньше, но не получил ответов, которые помогли.

У меня есть сайт, который позволяет пользователям размещать заметки. На этих заметках будет отметка времени. Часовой пояс по умолчанию на моем сервере 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');