目前,我使用用户帖子/上传/注册时间等附加、存储和转换时间/日期的方式是将默认时区设置为 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);
?>
现在我的问题是,这是一个好方法吗?是否有更常用的替代品,或者如果我尝试更新任何内容,将来会遇到问题吗?
最佳答案
视情况而定。根据变量的名称判断,您正在记录发布帖子的时间。可以使用php的time()
方法,也可以使用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()
来检索时间戳发布的日期/时间,然后使用您喜欢的方法以您想要的方式显示它。如果是这种情况,我认为你目前的方法是最好的。
关于php - 将时间/日期附加和应用到用户提交的数据并转换为指定时区的替代或更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002751/