我以前曾问过一个非常相似的问题,但没有找到有帮助的答案。
我有一个允许用户发布笔记的网站。这些笔记上会有一个时间戳。我服务器上的默认时区为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的时差,但不会计算出我的服务器时间。
答案 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');