问题: 尽管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,则表示已过期
答案 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;