提问者:小点点

无法转换PHP date_diff DateInterval


我花了很长时间试图找出两个日期之间的区别。我从数据库中获取一个日期,并试图将其与当前日期和时间进行比较。

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

使用下面的代码,我在尝试回显$SinceLastUpdate时遇到错误“类DateInterval的对象无法转换为字符串”。我尝试过各种日期的格式,我对这一个发疯了。

这是我目前的代码:

//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小时),那么我需要运行我的进程来更新数据。

我们将非常感谢您的帮助。


共1个答案

匿名用户

这里的问题是您只使用了%h修饰符。

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

所以,如果你比较你的例子

从三天前的下午2点到今天的下午3点

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

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

$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 */
}