将时间/日期附加到用户提交的数据并应用到指定时区的替代或更好的方法



目前,我使用用户发布/上传/注册时间等附加、存储和转换时间/日期的方式是将默认时区设置为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()来检索发布日期/时间的时间戳,然后使用您喜欢的方法以您想要的方式显示。如果是这样的话,我认为你目前的方法是最好的。

相关内容

  • 没有找到相关文章