【问题标题】:DateTime diff returns me 0 when the compared DateTimes are different当比较的 DateTimes 不同时,DateTime diff 返回我 0
【发布时间】:2019-09-06 16:09:28
【问题描述】:

我想返回两个日期之间的小时和分钟差异。问题是 diff 方法的结果返回给我的 diff 为 0(相同的 DateTimes)。

这是我的实际代码:

$last_vote_date = new DateTime(\Auth::user()->last_vote_at);
$next_vote_date = $last_vote_date;
$next_vote_date->add(new DateInterval('PT3H'));
$diff = $next_vote_date->diff($last_vote_date, true);
$vote_hours = $diff->format('%h h %I m');

我调试了我的变量。 $last_vote_date 是正确的日期时间。 $next_vote_date 是一个正确的 DateTime,表示最后投票日期 + 3 小时。 但是 diff 返回的 DateInterval 对象的所有属性都是 0 :

DateInterval Object ( [y] => 0 [m] => 0 [d] => 0 [h] => 0 [i] => 0 [s] => 0 [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => 0 [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) 

我真的不明白出了什么问题,因为我正在比较的两个 DateTime 对象是不同的,并且正是我想要的值。

【问题讨论】:

    标签: php datetime diff datediff date-difference


    【解决方案1】:

    当您执行$next_vote_date = $last_vote_date 时,您基本上是在复制参考。这意味着您对$next_vote_date 所做的任何更改都会影响$last_vote_date。解决这个问题的快速方法是复制对象:

    $last_vote_date = new DateTime(\Auth::user()->last_vote_at);
    $next_vote_date = clone $last_vote_date;
    $next_vote_date->add(new DateInterval('PT3H'));
    $diff = $next_vote_date->diff($last_vote_date, true);
    $vote_hours = $diff->format('%h h %I m');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多