2017-01-09 43 views
0

我有这样的代码在PHP来检查日期连续:检查连续几天在PHP

$dates = "2017-02-26, 2017-02-27, 2017-03-01"; 
$dates = explode(',', $dates); 

$conseq = array(); 
$ii = 0; 
$max = count($dates); 

for($i = 0; $i < count($dates); $i++) { 
    $conseq[$ii][] = date('Y-m-d',$dates[$i]); 

    if($i + 1 < $max) { 
     $dif = $dates[$i + 1] - $dates[$i]; 
     if($dif >= 90000) { 
      $ii++; 
     } 
    } 
} 

print_r($dates); 

问题是这样的代码不使工作在100%。

应该做一个阵列的连续几天,另一个用于每个单独的天是这样的:

Array (
    [0] => 2017-02-26 
    [1] => 2017-02-27 
) 
Array (
    [0] => 2017-03-01 
) 

任何人帮我请。

谢谢。

回答

1

请尝试以下回答

<?php 
$dates = "2017-02-26, 2017-02-27, 2017-03-01"; 
$dates = explode(',', $dates); 

$conseq = array(); 
$ii = 0; 
$max = count($dates); 

for($i = 0; $i < count($dates); $i++) { 
    $conseq[$ii][] = date('Y-m-d',strtotime($dates[$i])); 

    if($i + 1 < $max) { 
     $dif = strtotime($dates[$i + 1]) - strtotime($dates[$i]); 
     if($dif >= 90000) { 
      $ii++; 
     } 
    } 
} 

print_r($conseq); 
?> 
+0

虽然此代码段可以解决的问题,[包括一个解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于改善您的帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性注释来挤占代码,这会降低代码和解释的可读性! – Rizier123

0

你可以把它放在foreach循环这样的事情,然后按月筛选数组值。

$dates = "2017-02-26, 2017-02-27, 2017-03-01"; 
$date_arr = explode(',', $dates); 
$filter = array(); 
foreach($date_arr as $date){ 
    $filter[date('m', strtotime($date))][] = $date; 
} 
echo '<pre>'; print_r($filter); 
+0

关于一个月以上的连续日期呢? –