PHP date_diff 无法转换 DateInterval

PHP date_diff DateInterval could not be converted

我很难找出两个日期之间的差异。我正在从数据库中获取日期并尝试将其与当前日期和时间进行比较。

我需要的是两个日期之间的小时数。如果我将 date_diff 格式化为“%h%”,我只会得到小时之间减去的小时数,而不是三天前 2:00pm 和今天 3:00pm 之间的总时间。使用“%h”这只会给我 1 小时的结果。

使用下面的代码,我在尝试回显 $SinceLastUpdate 时收到错误 "Object of class DateInterval could not be converted to string"。我已经尝试了各种日期格式,我对这个感到很疯狂。

这是我当前的代码:

//Database stuff
$SqLiteSqlStr = "SELECT Max(END_TIME) AS LAST_UPDATE FROM DATA_LOAD_LOG";   
PDO_Connect("sqlite:$SqLiteDB");
$results = PDO_FetchAll($SqLiteSqlStr);
foreach ($results as $row) { $DataUpdated = $row["LAST_UPDATE"];}

//Make some kind of attempt to find out how old the data is
$TodaysDate = new DateTime("now");
$SinceLastUpdate = date_diff(new DateTime($DataUpdated), $TodaysDate );
echo "<br>TodaysDate " . date_format($TodaysDate,"Y-m-d H:i:s");
echo "<br>DataUpdated " . $DataUpdated;
echo "<br>SinceLastUpdate " . $SinceLastUpdate; 

现在,我不关心差异是秒、分钟还是小时,我只需要某种我可以使用的准确数字。 我想做的是检查数据的年龄。如果超过三天(72 小时),那么我需要 运行 我的流程来更新数据。

我们将不胜感激任何帮助。

你的问题是你只使用了 %h 修饰符。

DateInterval 中存储的信息不是日期之间的总小时数,而是所有类型 date/time 的数量。

因此,如果您在示例中进行比较

time like between 2:00pm three days ago and 3:00pm today

%h 一小时,是的。但是您还可以获得 3 天%d 修饰符。

所以,我想,你只需要检查一下:

$days = $SinceLastUpdate->format('%d');
if ($days < 3) { /* do stuff */ }

但以更简单的方式,您可以只比较时间戳 - 当前时间戳和 $DataUpdated,如果差异大于 3 天 (3 * 86400) - 做一些事情:

$TodaysDate = new DateTime("now");
$du = new DateTime($DataUpdated);
if ($du->format('U') - $TodaysDate->format('U') > (86400 * 3)) {
    /* do stuff */
}