用户在本地时区查看

时间:2014-02-05 09:02:55

标签: 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

为了争论,我避免担心夏令时,因为我认为这并不重要。

我知道我可以在我的应用程序中使用date_default_timezone_set(),但我确信我应该将发布时间设置为服务器时间,因此无需更改设置的时区。

我只想转换观众的时间

"Post as Server Time, Read as Local Time"

我不相信我是第一个使用他们的网络应用程序执行此操作的人,因此必须有答案。

我必须获得帖子的日期时间,获取用户查看帖子的时区(可能通过javascript作为php使用服务器端日期和时间)并使用用户的时区转换日期时间。

javascript中的

getTimezoneOffset()将计算用户与UTC的时差,但不会计算出我的服务器时间。

2 个答案:

答案 0 :(得分: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时间与GMT时间相同

答案 1 :(得分: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');