我在理解日期时间之间的差异时遇到问题。我正在使用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?
答案 0 :(得分:3)
DateTime::diff
在两个日期之间为您提供了差异,这很明显。哪一个更大或更小一点都没有关系,无论如何,增量就是增量。但是,生成的DateInterval
对象确实注意,使用DateInterval::$invert
属性,哪个对象更大或更小:
如果间隔表示负时间段,则为 1 ,否则为 0 。参见
DateInterval::format()
。
规则是如果$b
中的$a->diff($b)
在$a
之前,$invert
是1
。看着DateInterval::format
说过的话,您会看到:
R
。如果为负号,请在“-”上签名,如果为正号,请在“ +”上签名
r
因此,如果您愿意关心将来/过去的差异,则可以使用%R
中的%r
/ DateInterval::format
格式参数来输出“ -”和/或“ +”。如果您不在乎,请忽略该选项,并且无关紧要。