2014-02-05 35 views
3

我已经问过一个非常类似的问题,但没有得到任何帮助。用户在当地时区查看

我有一个网站,允许用户发布笔记。这些笔记上会有一个时间戳。我服务器上的默认时区为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" 

我不相信我是谁拥有了自己的Web应用程序执行此所以必须有一个答案在那里的第一人。

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

getTimezoneOffset()在JavaScript中可以计算出用户与UTC的时差,但不能从我的服务器时间算出。

+0

也许一些有用的信息的http://计算器.com/a/9849447/1468708 –

+0

哪些数据类型是否存储时间戳? –

+0

timestamp存储在mysql数据库中,日期时间 – Wildcard27

回答

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时间

+0

这越来越近了。 'var dateClientSide'然后必须通过php传递,因为我将使用while循环来显示所有帖子。有任何想法吗? – Wildcard27

+0

更好的想法是将这段代码封装在一个像showDateInClientSideFormat($ dateSaved)这样的JS函数调用中,并在PHP循环中调用该函数。请注意,您必须在PHP代码调用之前定义函数 – DhruvJoshi

+0

这真的会变成一个令人头痛的问题,并且也有点混乱!我想你的意思是在我的while循环中使用'echo“'无论何时显示注释日期? – Wildcard27