PHP时间不同

时间:2019-02-11 08:34:59

标签: php

问题: 尽管DB中的输出正确(时间戳),但输出还是错误的

数据库的屏幕截图:http://prntscr.com/mjftzn

代码就是输出

    $dbDate = strtotime(date('Y-m-d H:i:s')); // Database date
    $endDate =  strtotime("".$query['duedate']."");    // current time
    $diff = $endDate - $dbDate; /// diffrence
     $days = intval(intval($diff) / (3600*24));
$newDays = $days < 0 ? 'EXPIRED' : $days;

代码结果:http://prntscr.com/mjfw4t

预期:剩余14天而不是过期,如果为-1,则表示已过期

3 个答案:

答案 0 :(得分:1)

这是您如何计算两个日期之间的差值:

$date1 = "2007-03-24";
$date2 = "2009-06-26";

$diff = abs(strtotime($date2) - strtotime($date1));

$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));


printf("%d years, %d months, %d days\n", $years, $months, $days);

现在使用您自己的逻辑来实现它。

答案 1 :(得分:0)

在PHP中使用日期和时间时,DateTime库会处理很多您想做的事情。我最终大量使用的扩展是Carbon,它提供了许多功能来计算differences,间隔并将其转换为易于理解的形式等。

使用Carbon,您可以编写如下内容。

$days    = Carbon::parse(date('Y-m-d H:i:s'))->diffInDays(Carbon::parse($query['duedate']));
$newDays = $days < 0 ? 'EXPIRED' : $days;

但是,由于您似乎只是将当前时间用作“数据库日期”,因此可以使用Carbon::now()而不是将date()提供的字符串解析为Carbon对象。

答案 2 :(得分:0)

您可以在数据库中执行此操作。使用类似

SELECT duedate>NOW() as expired;