目前,我使用用户发布/上传/注册时间等附加、存储和转换时间/日期的方式是将默认时区设置为UTC,并在处理时使用PHP的time()
获取时间戳。
然后,我将提交的每一行的数据存储在数据库中(int(11)
(,然后当我显示他们的帖子/上传等时,我会进行一个查询,带上所附的时间戳,根据他们指定的时区进行转换,并将其转换为日期格式,使其可读。
请注意,$timezone
和$date_format
是在创建帐户时从其配置文件设置中选择的
存储数据
<?php
date_default_timezone_set('UTC');
$time_stamp = time();
// MySQL injection protection here...
// Store data here...
?>
检索数据
<?php
// MySQL query here....
$post_time = $row['time_stamp'];
$post_dt_zone = new DateTimeZone($timezone);
$time_from_post = date('r', $post_time);
$post_d_time = new DateTime($time_from_post);
$post_d_time->setTimeZone($post_dt_zone);
$time_from_post = $post_d_time->format($date_format);
?>
现在我的问题是,这是一个好方法吗?是否有更常用的替代方案,或者如果我尝试更新任何内容,我将来会遇到问题?
这取决于环境。根据变量的名称判断,你记录的是帖子发布的时间。您可以使用phptime()
方法,也可以使用MySQL方法。
MySQL方法:创建一个表(或编辑当前表(,时间发布字段'time_posted'
为:
CREATE TABLE table_name(
id int NOT NULL,
time_posted datetime NOT NULL DEFAULT NOW(),
PRIMARY KEY (id))
当你插入新行时,唯一改变的是你不再需要插入时间戳(或日期(,这将由MySQL自动完成。
但是,您应该知道,使用NOW()
将以以下格式存储日期/时间:2011-12-10 12:51:23.212
。所以,如果这就是你想要的日期显示方式,那么这可能是你可以使用的方法。您也可以使用CURDATE()
和CURTIME()
,它们分别(单独(显示日期和时间。
但是,如果您想以不同的格式显示日期/时间,则需要使用strtotime()
或mktime()
来检索发布日期/时间的时间戳,然后使用您喜欢的方法以您想要的方式显示。如果是这样的话,我认为你目前的方法是最好的。