【问题标题】:php date->diff() returning nonsensical amountsphp date->diff() 返回无意义的金额
【发布时间】:2015-05-19 10:26:08
【问题描述】:

这是我的代码:

$logdate = Input::get('logdate');
            $enddate = Input::get('enddate');
            //Cast the dates to yyyy-dd-mm format for comparison
            $startdt  = date('Y-d-m',strtotime($logdate));
            $enddt = date('Y-d-m',strtotime($enddate));
            //Cast the dates into datetime objects
            $date1 = new DateTime($startdt);
            $date2 = new DateTime($enddt);
            //Calculate the difference between the 2 datetime objects
            $diff = $date1->diff($date2, true);
            //cast logdate into correct format for entry in the database
            $newlogdate = strtotime($logdate);
            $formatlogdate = date('Y-d-m',$newlogdate);

我正在使用它来获取间隔中的天数:

 Log::info(intval($diff->days));

每当我在同一个月内编写涉及 12 天或更少差异的代码时,这里的代码都可以正常工作,但是一旦超过 12 天或当我尝试计算 2 个月之间的差异时,它就会变得混乱并给我结果16000+

例如,根据此代码,2015 年 4 月 26 日和 2015 年 2 月 5 日之间的天数相差 16557 天,我不知道他们是如何得出这个数字的,但大约是 45 年,结果是总是 16000 + 无论我选择哪个日期,因为它们在 12 天单月半径之外

【问题讨论】:

  • 当你在使用 Laravel 时,使用 Carbon 可能是一个好主意。它是内置的,可以为您节省一些代码行。 carbon.nesbot.com/docs/#api-difference
  • 那太好了,我希望我在写所有逻辑之前就看到了,现在重写没有意义,但感谢您的提示,我会把它保存在后面当我需要再次做这样的事情时,我的头脑

标签: php datetime laravel datediff


【解决方案1】:

当你在做 - date('Y-d-m',strtotime($logdate)); 它正在返回 - 1970-01-01 两个日期。 / 正在制造问题。 试试这个 -

$log = '26/04/2015';
$end = '02/05/2015';

$date1 = new DateTime(str_replace('/', '-', $log));
$date2 = new DateTime(str_replace('/', '-', $end));
$diff = $date1->diff($date2, true);
echo $diff->days;

输出

6

【讨论】:

  • 然而,我现在遇到了一个不同的问题,如果我尝试在我的数据库中创建事件(这就是为什么我需要计算我应该拥有多少行的原因),它现在每次都返回 1970
  • 初始日期:"$formatlogdate = date('Y-d-m',$newlogdate);"每个下一个日期:“$nextdate = date('Y-m-d', strtotime($formatlogdate. ' + ' . $i . ' days'));”我需要格式为 yyyy/mm/dd 的这些日期,但一旦我离开同月,它就会重置为 1970
  • 我想我让它像这样工作:$dateadd = $date1->add('P'.$i.'D'); $nextdate = $date added->format('Y/m/d');
  • 不,这是错误的 ->add(new DateInterval('P1D'); 貌似
【解决方案2】:

你这样做的正确方法是:-

$log = '26/04/2015';
$end = '02/05/2015';

$date1 = \DateTime::createFromFormat('d/m/Y', $log);
$date2 = \DateTime::createFromFormat('d/m/Y', $end);
$diff = $date1->diff($date2, true);
echo $diff->days;

http://3v4l.org/EhGaA

【讨论】:

    【解决方案3】:

    或者试试看:

    $datetime1 = strtotime("2011-10-10 10:00:00");
    $datetime2 = strtotime("2011-10-10 10:45:00");
    $interval  = abs($datetime2 - $datetime1);
    $minutes   = round($interval / 60);
    echo 'Diff. in minutes is: '.$minutes; 
    

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      相关资源
      最近更新 更多