【发布时间】:2021-10-05 14:44:42
【问题描述】:
我在 WordPress 网站上创建了一个自定义表单,让用户单击一个按钮开始记录时间,然后在另一个页面上有一个不同的表单让用户停止记录时间。
当他们提交第一个表单开始记录时间时,我将这个帖子元数据添加到数据库中:
/* Start timer */
$now = strtotime('now');
update_post_meta( $post_id, 'start_time', $now);
数据库中的示例值如下所示:1627607870
当他们稍后提交第二个表单以停止记录时间时,我将此帖子元数据添加到数据库中:
/* End timer */
$now = strtotime('now');
update_post_meta( $post_id, 'end_time', $now);
数据库中的示例值如下所示:1627607890
为了计算过去了多少时间,我做了简单的减法:
/* Total time */
$start_time = get_post_meta($post_id, 'start_time', TRUE);
$end_time = get_post_meta($post_id, 'end_time', TRUE);
$total_time = $end_time - $start_time;
echo $total_time;
...使用上面显示的示例值 $total_time 将返回 20。
这一切都很好 - 对我来说。但是,我在不同国家/地区的一些用户说返回的总时间完全错误,有时甚至显示看起来很长的完全随机数。
所以我想知道我的方法是否有问题?我的直觉是不同的时区可能会影响$total_time,但我可能错了。
【问题讨论】:
-
看看php manual:警告此函数返回的Unix时间戳不包含有关时区的信息。为了使用日期/时间信息进行计算,您应该使用功能更强大的 DateTimeImmutable。
-
我看到了,但我不相信这很重要,但也许我对此有些不理解。在我看来,$now、$start_time 和 $end_time 的值是通过获取自格林威治标准时间 1970 年 1 月 1 日 0:00:00 以来的秒数来确定的。
-
没错,unix 时间戳通常不包含时区信息。我不确定那里发生了什么