【发布时间】:2016-04-23 09:24:19
【问题描述】:
我想弄清楚如何在两个重叠的日期范围之间获取总月数。
例如 从 Date-A 到 Date-B 的日期范围与 Date-X 和 Date-Y 的日期范围重叠。
_ Start|Jan - Feb - March - April ------ Nov - Dec|End (DateRange A)
Start|Jan - Feb ---- Dec - Jan - Feb|End _
在两个日期范围内,一月和二月发生冲突。意味着总共有 2 个月。 所以我希望这两个月在我的数组中,这样我就可以在上面应用不同的函数。
例如我有这两个日期
$dateRange1Start = "2015-07-01";
$dateRange1End = "2014-06-30";
=-=-=-=====-=-==
$dateRange2Start = "2012-02-01";
$dateRange2End = "2014-12-31";
这两个日期范围之间总共有 6 个月的冲突。我想要这 6 个月。
我试图在 google 中搜索帮助,但大多数情况下我得到的都是小于或大于符号。但具体是这样的。我试图实现我自己的逻辑,但它没有让我到任何地方,可悲的是只有更多的问题:(
我正在尝试得到这样的结果
$collidingDates = array("2014-07","2014-08","2014-09","2014-10","2014-11","2014-12");
任何帮助将不胜感激。 :)
=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=--=-=
更新:
这是我到目前为止所做的,是的,从这里和那里获取一些代码。并稍微调整一下以满足我的要求。
//Getting all Months from First Date Range
$start = (new DateTime('2014-06-01'))->modify('first day of this month');
$end = (new DateTime('2015-05-06'))->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$firstPeriod = new DatePeriod($start, $interval, $end);
//Getting all Months from Second Date Range.
$start = (new DateTime('2012-02-01'))->modify('first day of this month');
$end = (new DateTime('2014-12-31'))->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$secondPeriod = new DatePeriod($start, $interval, $end);
$collidingDates = array();
foreach ($firstPeriod as $f_dt) {
foreach($secondPeriod as $s_dt){
if($f_dt->format("Y-m") === $s_dt->format("Y-m")){
array_push($collidingDates,$f_dt->format("Y-m"));
}
}
}
echo "<pre>";
print_r($collidingDates);
我得到了这个输出。
Array
(
[0] => 2014-06
[1] => 2014-07
[2] => 2014-08
[3] => 2014-09
[4] => 2014-10
[5] => 2014-11
[6] => 2014-12
)
但我想我会多得到 1 个月 2014-06,不知道怎么O_o??
【问题讨论】:
-
您是否尝试过将时间转换为 DateTime 对象并使用 ->diff() ,?
-
不,因为我不确定如何在两个日期范围之间获取月份。我有两个日期的差异,但不是两个日期范围。