理解日期时间差和求逆时遇到问题

时间:2019-02-05 10:46:36

标签: php datetime

我在理解日期时间之间的差异时遇到问题。我正在使用PHP datetime类。

这是我的代码中用于计算日期时间差的一小部分:

date_default_timezone_set("Asia/Kolkata");

function timeline_date($date)
{
    $today = new DateTime();
    $timeline_date = new DateTime($date);
    $interval = $today->diff($timeline_date);

    echo "<pre>";
    print_r($today);
    print_r($timeline_date);
    print_r($interval);
    echo "</pre>";
}
$date = "2019-02-02 04:36:02";
echo timeline_date($date);

语句的含义是什么

$interval = $today->diff($timeline_date);

是否要从$ today中减去$ timeline_date?

还是从$ timeline_date减去$ today?

我对此特殊陈述感到非常困惑。我在互联网上搜索,但上面没有明确提及。

$ timeline_date也可以是过去或将来的日期,甚至可以是今天的日期。那么从大数量中减去小数量有关系吗?

我从上面的代码中得到以下输出:

DateTime Object
(
    [date] => 2019-02-05 16:11:37
    [timezone_type] => 3
    [timezone] => Asia/Kolkata
)
DateTime Object
(
    [date] => 2019-02-02 04:36:02
    [timezone_type] => 3
    [timezone] => Asia/Kolkata
)
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 3
    [h] => 11
    [i] => 35
    [s] => 35
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 1
    [days] => 3
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)

我们可以在上面的数组中看到[invert] => 1。它的实际含义是什么?如果我将$ date更改为:

$date = "2019-02-10 04:36:02";

然后[invert] => 0更改为1。为什么?这是否意味着如果我们有过去日期的差额,那么invert将为0,如果我们有未来日期,则此数组元素将为1?

1 个答案:

答案 0 :(得分:3)

DateTime::diff在两个日期之间为您提供了差异,这很明显。哪一个更大或更小一点都没有关系,无论如何,增量就是增量。但是,生成的DateInterval对象确实注意,使用DateInterval::$invert属性,哪个对象更大或更小:

  

如果间隔表示负时间段,则为 1 ,否则为 0 。参见DateInterval::format()

规则是如果$b中的$a->diff($b)$a之前,$invert1。看着DateInterval::format说过的话,您会看到:

  

R 。如果为负号,请在“-”上签名,如果为正号,请在“ +”上签名
   r

因此,如果您愿意关心将来/过去的差异,则可以使用%R中的%r / DateInterval::format格式参数来输出“ -”和/或“ +”。如果您不在乎,请忽略该选项,并且无关紧要。