【问题标题】:Getting time difference in seconds以秒为单位获取时差
【发布时间】: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 时间戳通常不包含时区信息。我不确定那里发生了什么

标签: php wordpress date time


【解决方案1】:

您可以尝试从 GMT 计算时间。这样,您至少可以确定是否是时区问题。

【讨论】:

    【解决方案2】:

    您可以使用函数current_time(timestamp);它带来在WP admin中设置的时区。

    WordPress 有一些与时间相关的常量:

    MINUTE_IN_SECONDS 
    
    HOUR_IN_SECONDS 
    
    DAY_IN_SECONDS 
    
    WEEK_IN_SECONDS
    
    MONTH_IN_SECONDS 
    
    YEAR_IN_SECONDS
    

    【讨论】:

      【解决方案3】:

      另一个 WordPress 持续时间函数是 human_readable_duration()

      将持续时间转换为人类可读的格式。

      https://developer.wordpress.org/reference/functions/human_readable_duration/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-09
        • 1970-01-01
        • 2013-11-04
        • 1970-01-01
        • 1970-01-01
        • 2014-08-24
        • 2014-06-24
        • 1970-01-01
        相关资源
        最近更新 更多