我想找出days/dates
之间的常见two periods
。
例如
[period1 - 25/10/2010 - 25-11-2010 ] and [ period2 - 10-11-2010 - 10-12-2010 ]
此处15 days
,26-10
到10-11
很常见。如何在PHP或Zend Framework中找到它。
答案 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;