【问题标题】:PHP time different [duplicate]PHP时间不同[重复]
【发布时间】:2019-02-11 17:27:57
【问题描述】:

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

数据库截图: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 则显示过期

【问题讨论】:

标签: php


【解决方案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);

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

【讨论】:

  • Jsus,这么多计算,为什么不用DateTime库呢?
  • 我喜欢maths。
  • CPU 也是如此,但人们为 EC2 实例支付的费用并不多。
【解决方案2】:

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

SELECT duedate>NOW() as expired; 

【讨论】:

    【解决方案3】:

    在 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 对象。

    【讨论】:

    • @treyBake:对于看似简单的事情,我倾向于帮助人们找到答案,阅读并理解它:)。虽然更新了一小段代码。尽管提供的初始代码似乎有点奇怪,因为操作的“数据库日期”似乎是当前时间。但是 op 可能知道系统的逻辑应该如何工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多