如何计算两个 DateInterval 对象的总和
How calculate the sum of two DateInterval object
我有两个日期间隔对象,是否有任何默认方法来添加这些间隔对象?
$date1 = date_create("2013-03-15");
$date2 = date_create("2013-12-12");
$diff_1=date_diff($date1,$date2);
echo $diff_1->format("%y years").' '.$diff_1->format("%m months"). ' ' . $diff_1->format("%d days");
//0 years 8 months 27 days
$date3 = date_create("2015-02-15");
$date4 = date_create("2015-12-12");
$diff_2=date_diff($date3,$date4);
echo $diff_2->format("%y years").' '.$diff_2->format("%m months"). ' ' . $diff_2->format("%d days");
//0 years 9 months 27 days
$diff_1+$diff_2
= 1 year 6 months 24 days
我需要计算 diff_1
和 diff_2
的总和?
您可以将两个 DateInterval
对象添加到一个新的 DateTime
对象,然后再次计算差异。
<?php
$date1 = date_create("2013-03-15");
$date2 = date_create("2013-12-12");
$diff_1=date_diff($date1,$date2);
echo $diff_1->format("%y years").' '.$diff_1->format("%m months"). ' ' . $diff_1->format("%d days");
//0 years 8 months 27 days
$date3 = date_create("2015-02-15");
$date4 = date_create("2015-12-12");
$diff_2=date_diff($date3,$date4);
echo $diff_2->format("%y years").' '.$diff_2->format("%m months"). ' ' . $diff_2->format("%d days");
//0 years 9 months 27 days
$today = new DateTime();
$today->add($diff_1);
$today->add($diff_2);
$diff_total = $today->diff(new DateTime());
echo $diff_total->format("%y years").' '.$diff_total->format("%m months"). ' ' . $diff_total->format("%d days");
可能最简单的方法是创建一个新对象并克隆它,将两个(或更多)DateTimeIntervals(在您的情况下为 $diff_1
和 $diff_2
)添加到新对象。现在找到新对象和它的克隆之间的区别,是你原来拥有的两个 DateTimeIntervals 的总和。
// Define two intervals
$date1 = date_create("2013-03-15");
$date2 = date_create("2013-12-12");
$diff_1 = date_diff($date1,$date2);
$date3 = date_create("2015-02-15");
$date4 = date_create("2015-12-12");
$diff_2 = date_diff($date3,$date4);
// Create a datetime object and clone it
$dt = new DateTime();
$dt_diff = clone $result;
// Add the two intervals from before to the first one
$dt->add($diff_2);
$dt->add($diff_1);
// The result of the two intervals is now the difference between the datetimeobject and its clone
$result = $dt->diff($dt_diff);
var_dump($result);
转储结果包括
["y"]=>
int(1)
["m"]=>
int(6)
["d"]=>
int(21)
..也就是1年6个月21天。
旁注
您不必使用 format()
连接这么多不同的格式。您可以在一行中完成所有操作,
echo $result->format("%y years %m months %d days");
我有两个日期间隔对象,是否有任何默认方法来添加这些间隔对象?
$date1 = date_create("2013-03-15");
$date2 = date_create("2013-12-12");
$diff_1=date_diff($date1,$date2);
echo $diff_1->format("%y years").' '.$diff_1->format("%m months"). ' ' . $diff_1->format("%d days");
//0 years 8 months 27 days
$date3 = date_create("2015-02-15");
$date4 = date_create("2015-12-12");
$diff_2=date_diff($date3,$date4);
echo $diff_2->format("%y years").' '.$diff_2->format("%m months"). ' ' . $diff_2->format("%d days");
//0 years 9 months 27 days
$diff_1+$diff_2
= 1 year 6 months 24 days
我需要计算 diff_1
和 diff_2
的总和?
您可以将两个 DateInterval
对象添加到一个新的 DateTime
对象,然后再次计算差异。
<?php
$date1 = date_create("2013-03-15");
$date2 = date_create("2013-12-12");
$diff_1=date_diff($date1,$date2);
echo $diff_1->format("%y years").' '.$diff_1->format("%m months"). ' ' . $diff_1->format("%d days");
//0 years 8 months 27 days
$date3 = date_create("2015-02-15");
$date4 = date_create("2015-12-12");
$diff_2=date_diff($date3,$date4);
echo $diff_2->format("%y years").' '.$diff_2->format("%m months"). ' ' . $diff_2->format("%d days");
//0 years 9 months 27 days
$today = new DateTime();
$today->add($diff_1);
$today->add($diff_2);
$diff_total = $today->diff(new DateTime());
echo $diff_total->format("%y years").' '.$diff_total->format("%m months"). ' ' . $diff_total->format("%d days");
可能最简单的方法是创建一个新对象并克隆它,将两个(或更多)DateTimeIntervals(在您的情况下为 $diff_1
和 $diff_2
)添加到新对象。现在找到新对象和它的克隆之间的区别,是你原来拥有的两个 DateTimeIntervals 的总和。
// Define two intervals
$date1 = date_create("2013-03-15");
$date2 = date_create("2013-12-12");
$diff_1 = date_diff($date1,$date2);
$date3 = date_create("2015-02-15");
$date4 = date_create("2015-12-12");
$diff_2 = date_diff($date3,$date4);
// Create a datetime object and clone it
$dt = new DateTime();
$dt_diff = clone $result;
// Add the two intervals from before to the first one
$dt->add($diff_2);
$dt->add($diff_1);
// The result of the two intervals is now the difference between the datetimeobject and its clone
$result = $dt->diff($dt_diff);
var_dump($result);
转储结果包括
["y"]=>
int(1)
["m"]=>
int(6)
["d"]=>
int(21)
..也就是1年6个月21天。
旁注
您不必使用 format()
连接这么多不同的格式。您可以在一行中完成所有操作,
echo $result->format("%y years %m months %d days");