Следующий скрипт создает и массив временные метки из вашего массива британских дат, а затем вычисляет max и мин. временные метки для расчета разницы в днях.
Если отметка времени по умолчанию равна 0, она не добавляется к массиву временных меток, исключая огромные результаты за одну плохую дату по умолчанию по умолчанию I.e. Когда некорректная дата или до эпохи 1/1/1970
<?php
$datesarray = array('10-05-2013', '20-05-2013', '12-08-2013');
$date_diff=0; // default for 0 or 1 dates
if((is_array($datesarray)) && (sizeof($datesarray)>1))
{
$timestampsarray=array();
reset($datesarray);
while(list($key,$value)=each($datesarray))
{
$timestamp=timestamp_from_UK($value);
if($timestamp!=0) $timestampsarray[$key]=$timestamp;
}
$date_diff = abs(max($timestampsarray)-min($timestampsarray))/86400;
}
echo $date_diff;
function timestamp_from_UK($ukdatetime)
{
// where PHP is processing UK dates d-m-y correctly
$ukdatetime=str_replace('/', '-', $ukdatetime);
if(date("d", strtotime("1-2-1970"))==1) return strtotime($ukdatetime);
// Fallback script for when PHP is NOT processing UK dates
$success=false;
if(!$success) $success=preg_match("/([0-9]{1,2})[^0-9]([0-9]{1,2})[^0-9]([0-9]{2,4})[^0-9]([0-9]{1,2})[^0-9]([0-9]{1,2})[^0-9]([0-9]{1,2})/", $ukdatetime, $matches);
if(!$success) $success=preg_match("/([0-9]{1,2})[^0-9]([0-9]{1,2})[^0-9]([0-9]{2,4})[^0-9]([0-9]{1,2})[^0-9]([0-9]{1,2})/", $ukdatetime, $matches);
if(!$success) $success=preg_match("/([0-9]{1,2})[^0-9]([0-9]{1,2})[^0-9]([0-9]{2,4})/", $ukdatetime, $matches);
if(!$success) return 0;
// ensure all values are set - to avoid invalid offset
for($i=4;$i<=6;$i++)
{
if(!isset($matches[$i])) $matches[$i]=0;
}
// $matches[0] is the full matched string
return mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[1], $matches[3]);
}
?>
это дубликат вопрос http://stackoverflow.com/questions/10595524/date-range-array-excluding-the-sunday-the-holiday -in-php? rq = 1 – DevZer0
Если вы используете формат Ymd (например, MySQL), вы можете использовать 'max ($ datearray)' и 'min ($ datearray)' как конец и начало. И strtotime() более глобально можно использовать с этим, поскольку d-m-y и m-d-y используются форматы, но не дают одинаковых результатов strtotime. __WARNING__ глядя на данные '20-05-2013', вы используете британский формат, поэтому strtotime() не сработает для вас! – Waygood
вам повезло, что strtotime не искажает эти значения даты. Являются ли они 3 января и 6 января? или 1 марта и 1 июня? никогда НИКОГДА не зависит от strtotime, чтобы делать «правильную вещь». –