2011-03-11 129 views
1

我正在创建一个社交网络类型的网站。该网站在交通等方面表现出色。我遇到了一个问题,那里有人们的状态和互动的现场新闻。当我从这里发布一些东西时(亚特兰大GA),是在1分钟之前发布的。它说它是在16小时前发布的。如何处理用户在不同时区的日期时间显示?

我正在使用LAMP设置,使用php 5.就JQuery插件im使用timeago使得abbr的外观很漂亮。

我不确定是否需要根据用户的位置或基于位置的数据库时区为用户设置PHP时区。

+0

我必须补充说,PHP服务器和MySQL服务器都是在EST时区设置的。另外我在输入数据时使用了NOW()的日期时间。 – 2011-03-11 17:45:19

+1

通常最好将日期以UTC存储在数据库中,然后在代码中进行适当的转换。有一个固定的时区来源数据解决了很多可移植性问题(例如,如果您移动到其他时区的另一台主机,则必须更新所有日期/时间字段)。 – 2011-03-11 17:46:25

回答

5

我会把所有的日期都保存在UTC之类的东西里,然后根据那个做比较。如果您需要显示日期,只需将其从UTC转换为特定用户所在的时区(无论是在服务器上还是通过JS)即可。

0

timeago插件需要输入UTC时间或浏览器本地时间。您可能会给timeago一个标记为UTC的本地时间。假设当地时间为9:25 AM:

<script language="javascript"> 
jQuery(document).ready(function() {jQuery("abbr.timeago").timeago();}); 
</script> 

Correct UTC: <abbr class="timeago" title="2011-03-25T13:25:00Z">March 25, 2011</abbr> 
Correct Local: <abbr class="timeago" title="2011-03-25T09:25:00">March 25, 2011</abbr> 
Wrong (local time marked as UTC)<abbr class="timeago" title="2011-03-25T09:25:00Z">March 25, 2011</abbr> 

不要担心更改DB时区或PHP。用Javascript来做。找出PHP发送给浏览器的时间字符串是否已转换为UTC。如果是这样,请在调用timeago之前将“Z”后缀添加到时间字符串中。如果不是UTC,则删除'Z'后缀。希望有所帮助。

相关问题