【问题标题】:Get time passed always 0获取时间总是 0
【发布时间】:2014-12-23 22:27:32
【问题描述】:

这是我加载页面时得到的

代码在这里:

echo "<b>Requested:</b><br>".round(abs(date("Y-m-d H:i:s") - date("Y-m-d H:i:s", strtotime($row['timestamp']))) / 60,2)." minute(s) ago<br>";
echo "<b>Current Time:</b><br>".date("Y-m-d H:i:s")."<br>  ";
echo "<b>Requested Time:</b><br>".date("Y-m-d H:i:s", strtotime($row['timestamp']))."<br>  ";

我的问题是它总是说它是 0 分钟前请求的,图像显示它应该是 7 分钟前并且还在计数。我已经尝试了上面链接中的代码显示的内容,我尝试使用不同的格式来处理它,有些给了我大量的数字,所以我来这里寻求帮助

【问题讨论】:

  • 这是从 MySQL 数据库中提取的吗?如果是,timestamp 列的确切数据类型是什么? (假设是 TIMESTAMP)
  • 如果是MySql fetch并且数据类型是日期,请确保PHP和MySQL都使用相同的日期格式。

标签: php date time timestamp datediff


【解决方案1】:

这应该适合你:

<?php

    //$row['timestamp'] = 1419272871; As an example

    echo "<b>Requested:</b><br>".round(abs(strtotime(date("Y-m-d H:i:s")) - strtotime(date("Y-m-d H:i:s", $row['timestamp'])))/60, 2)." minute(s) ago<br>";
    echo "<b>Current Time:</b><br>".date("Y-m-d H:i:s")."<br>  ";
    echo "<b>Requested Time:</b><br>".date("Y-m-d H:i:s", $row['timestamp'])."<br>  ";

?>

输出:

Requested:
1686.53 minute(s) ago
Current Time:
2014-12-23 23:34:23
Requested Time:
2014-12-22 19:27:51

【讨论】:

    【解决方案2】:

    您正在尝试对字符串进行数学运算,因为 date 函数会以您提供的格式创建一个字符串。为此使用日期时间对象

    $previousDate = $row['timestamp'];
    $startdate = new DateTime($previousDate);
    $endDate   = new DateTime();
    $interval  = $endDate->diff($startdate);
    
    $int = $interval->format('%i');
    echo "<b>Requested:</b><br>" . $int ." minute(s) ago<br>";
    

    这假设$row['timestamp'] 已经采用了“YYYY-mm-dd HH:mm:ss”格式。对于 unix 样式的时间戳,您希望在构造中使用 & 符号

    $previousDate = new DateTime('@' . $row['timestamp']);
    

    【讨论】:

    • 这行得通,但唯一的问题是它现在计算分钟数,但没有得到相同的小时/天等,所以应该是 77 分钟前而不是 1 小时 17 分钟,你知道我的意思?
    • 查看php's DateInterval 的文档。您可以在格式方法中指定您想要的任何字符串。我只是选择了 %i 几分钟,因为那是您的原始代码所拥有的。
    猜你喜欢
    • 2019-01-24
    • 2021-01-30
    • 2014-07-30
    • 2012-08-19
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多