我想找出two periods之间的共同days/dates。
例如
period1: 25-10-2010 to 25-11-2010
period2: 10-11-2010 to 10-12-2010在这里,15 days、10-11到25-11是很常见的。如何在PHP或Zend Framework中找到它。
发布于 2010-10-05 21:11:52
$nb_days = (strtotime($period1[1])-strtotime($period2[0])) / 86400应该行得通。
发布于 2010-10-05 21:18:06
使用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 />';
}发布于 2020-01-08 13:20:54
有关更多信息,请参阅以下内容: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;https://stackoverflow.com/questions/3863754
复制相似问题