2012-05-13 36 views
0

我正在创建这篇文章,以获得确认,我正确理解过程,并获得有关解决问题的一些小细节的反馈后期时间显示并正确存储在不同时区的用户。PHP显示存储的时间数据,并存储时间数据,同时考虑不同的时区

存储

第一步是获得用户时区作为GMT使用JavaScript函数偏移格式,并将其存储在一个会话变量的时间。例如,$ timezone变量将存储GMT -4

$timezone=$_SESSION['time']; 

接下来,一旦我有我的用户时区。当用户发布帖子时,我将发布时间存储在mysql数据库中,我需要将其存储为UTC格式。我该怎么做呢?目前当我存储时间数据。它是以下列方式。我的邮票字段是日期时间格式,如果可能,我想离开它。

INSERT INTO posts (stamp) VALUES (now()) 

我用什么函数代替now()来获取UTC格式,然后将其插入到我的数据库中?我假设我需要使用一个php函数,它将使用$ timezone生成UTC日期。

显示时间

接下来,一旦UTC日期存储在数据库中。我需要根据我们设置的$ timezone变量向用户显示数据。

所以,当我显示时间,我目前做

echo date('F d', strtotime($list1['stamp'])); 

一旦我有存储的数据作为UTC时间,这将显示UTC时间,但我需要显示UTC的偏移用户自己时区,所以我需要使用$ timezone将UTC时间的$list['stamp']转换为用户时区。我为此使用了什么功能?

tl:dr 这应该是我需要做的工作。让我知道你是否看到任何建议,或者我还没有考虑过的项目,以及如果你知道我需要使用什么函数将时间转换为UTC以存储在数据库中,以及使用什么函数来转换UTC时间使用$ timezone变量显示用户。

+1

不是一个正确的答案,但我发现DateTime类和它的setTimezone方法在过去很有用。 – Corbin

+0

非常感谢,我会考虑一下。 – arboles

回答

1

对于插入UTC时间到数据库:

INSERT INTO posts (stamp) VALUES (UTC_DATE()) 

UPDATE:这只会插入YYYY-MM-DD到你的数据库。如果您需要的时间为好,然后用:

INSERT INTO posts (stamp) VALUES (UTC_TIMESTAMP()) 

然后根据时区打印日期:

$date = date_create($list1['stamp'], timezone_open($timezone)); //$timezone='Pacific/Nauru'; 
echo date_format($date, 'F d'); 

这将有助于让你开始。了解更多关于PHP的面向对象方法的DateTime Class,以及更一般的更清晰的编程。

+0

非常感谢。timezone_open()需要$ timezone ='Pacific /瑙鲁'或可以$ timezone ='GMT -4'如果前者,我如何将GMT -4转换为'Pacific /瑙鲁'(即将偏移量转换为时区名称。) – arboles

+0

我想你需要mysql函数UTC_TIMESTAMP()而不是UTC_DATE() – user570783

+0

很酷的谢谢。我应该使用UTC_TIMESTAMP而不是UTC_DATE存储日期?这与my_sql图章数据库字段是datetime格式有关吗? – arboles

相关问题