3

Вопрос по php, datetime – пользователи для просмотра в местном часовом поясе

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

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

@ matt1985 Вы ​​попробовали мой ответ?

от DhruvJoshi

@ MarkResølved Предоставленная вами ссылка предназначена только для перевода времени UTC в местное время. Как подсказывает мой вопрос, мне нужно получить дату и время публикации сообщения, часовой пояс пользователя, который просматривает сообщение, и преобразовать дату и время, используя часовой пояс пользователя. Смотрите редактировать.

от Wildcard27

отметка времени хранится в базе данных mysql как datetime

от Wildcard27

Какого типа данных вы храните метку времени?

от Max Girkens

может быть какая-то полезная информацияstackoverflow.com/a/9849447/1468708

от Max Girkens
2 ответа
1

Что вы можете сделать

это сохранить время 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 совпадает со временем по Гринвичу

Лучшей идеей будет заключить этот фрагмент кода в вызов функции JS, такой как showDateInClientSideFormat ($ dateSaved), и вызвать функцию внутри цикла PHP. Обратите внимание, что вам нужно определить функцию перед вызовом кода PHP

от DhruvJoshi

Это действительно становится болью в заднице, и немного грязно! Я предполагаю, что вы имеете в виду в моем использовании цикла whileecho "<script>showDateInClientSideFormat($dateSaved); </script> где показан комментарий datetime?

от Wildcard27

Извините, @DhruvJoshi, я был занят чтением об эффектах часового пояса для моей цели. Хотя я не смог проверить это, я знаком с тем, что дал ваш ответ, и уверен, что он будет идеальным. Спасибо за помощь. Я не могу поверить, у меня было только 2 ответа на это за час! Было приятно работать с вами :-)

от Wildcard27

@ matt1985 Да. Правильно! Я изменил свой ответ, чтобы отразить ваши потребности.

от DhruvJoshi
0

Вы можете использовать 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('d.m.Y H:i');

Мне все еще нужно создать часовой пояс пользователей ...

от Wildcard27

Похожие вопросы