可能重复:
检查集合中的连续日期并返回范围
我有一个日期数组,它是从mySQL查询中获得的.我需要将数组分成多个数组,以便每个数组中的日期是连续的.
所以,如果我开始
$datearray = array("2013-05-05", "2013-05-06", "2013-05-07", "2013-05-08", "2013-06-19", "2013-06-20", "2013-06-21");
Run Code Online (Sandbox Code Playgroud)
我需要能够把它分成两部分
$firstdatearray = array("2013-05-05", "2013-05-06", "2013-05-07", "2013-05-08");
$seconddatearray = array("2013-06-29", "2013-06-30", "2013-07-01");
Run Code Online (Sandbox Code Playgroud)
最后我将能够打印
3月5日至8月3日,7月29日至7月1日
我怎样才能做到这一点?我不知道从哪里开始.
这是完整的工作答案。(享受!)
您必须遍历 $datearray 中的每个值
<?php
$datearray = array("2013-05-05", "2013-05-06", "2013-05-07", "2013-05-08", "2013-06-19", "2013-06-20", "2013-06-21");
asort($datearray);
$resultArray = array();
$index = -1;
$last = 0;
$out = "";
foreach ($datearray as $date) {
$ts = strtotime($date);
if (false !== $ts) {
$diff = $ts - $last;
if ($diff > 86400) {
$index = $index + 1;
$resultArray[$index][] = $date;
} elseif ($diff > 0) {
$resultArray[$index][] = $date;
} else {
// Error! dates are not in order from small to large
}
$last = $ts;
}
}
foreach ($resultArray as $a) {
if (count($a) > 1) {
$firstDate = $a[0];
$firstDateBits = explode('-',$firstDate);
$lastDate = $a[count($a)-1];
$lastDateBits = explode('-',$lastDate);
if ($firstDateBits[1] === $lastDateBits[1]) {
$out .= intval($firstDateBits[2]) . '-' . intval($lastDateBits[2]) . ' ' . date("M",strtotime($firstDate)) . ', ';
} else {
$out .= date("M d",strtotime($firstDate)) . '-' . date("M d",strtotime($lastDate)) . ', ';
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
5-8 May, 19-21 Jun
Run Code Online (Sandbox Code Playgroud)