2017-06-22 74 views
0

我有一段时间试图找到两个日期之间的差异。我从数据库中获取日期并尝试将其与当前日期和时间进行比较。PHP date_diff DateInterval无法转换

我需要的是两个日期之间的小时数。如果我将date_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小时),那么我需要运行我的过程来更新数据。

任何帮助将不胜感激。

+0

【二日期时间之间PHP来找茬]的可能的复制(https://stackoverflow.com/questions/15688775/php-find-difference-between-two-datetimes) – zod

回答

0

你这里的问题是,你只使用%h修改。在DateInterval

信息存储不喜欢的日期之间的时间总量,但所有类型的日期/时间量。

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

时间像天下午2:00三者之间前和下午3:00今天

你一小时%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 */ 
} 
相关问题