php date_diff dateinterval无法转换



我有一段时间试图找到两个日期之间的区别。我正在从数据库中获得一个日期,并试图将其与当前日期和时间进行比较。

我需要的是两个日期之间的小时数。如果我将date_diff格式化为"%h%",那么我只在小时时间之间就减去小时,而不是像三天前2:00 pm之间的总时间一样,今天下午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小时(,那么我需要运行我的过程以更新数据。

任何帮助都将不胜感激。

您的问题是您仅使用%h修饰符。

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

所以,如果您在示例中进行比较

时间像三天前2:00 pm之间,今天下午3:00

是的,您可以使用%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 */
}

最新更新