如何在两个日期范围内找到常见日期/天

时间:2010-10-05 12:50:48

标签: php zend-framework

我想找出days/dates之间的常见two periods

例如

[period1 - 25/10/2010 - 25-11-2010 ] and [ period2 - 10-11-2010 - 10-12-2010 ]

此处15 days26-1010-11很常见。如何在PHP或Zend Framework中找到它。

3 个答案:

答案 0 :(得分:0)

$nb_days = (strtotime($period1[1])-strtotime($period2[0])) / 86400

应该工作。

答案 1 :(得分:0)

使用NullUserException的建议方法

date_default_timezone_set('GMT');


$period1 = array('25-10-2010','25-11-2010');
$period2 = array('10-11-2010','10-12-2010');

$p1 = range(strtotime($period1[0]),strtotime($period1[1]),86400);
$p2 = range(strtotime($period2[0]),strtotime($period2[1]),86400);

$r = array_intersect($p1,$p2);

foreach($r as $date) {
 echo $date,' - ',date('d-M-Y H:i:s',$date),'<br />';
}

答案 2 :(得分:0)

有关更多信息,请参见此SO答案:https://stackoverflow.com/a/2970328/781153

以及PHP中的相应代码:

$period1 = ['25-10-2010', '25-11-2010'];
$period2 = ['10-11-2010', '10-12-2010'];
$dates = [
    'p1start' => new DateTime($period1[0]),
    'p1end' => new DateTime($period1[1]),
    'p2start' => new DateTime($period2[0]),
    'p2end' => new DateTime($period2[1])
];
$start = max($dates['p1start'], $dates['p2start']);
$end = min($dates['p1end'], $dates['p2end']);
$days = $start->diff($end);
var_dump($days);

结果:

object(DateInterval)[694]
[...]
  public 'invert' => int 0
  public 'days' => int 15
[...]

请注意,如果没有普通日子,则invert属性可能是1。在没有重叠的情况下获得零天的解决方案是:

$commonDays = $start > $end ? 0 : $start->diff($end)->days;