PHP日期数组最大连续日期

时间:2018-02-02 15:58:07

标签: php arrays date

我有一个这样的数组:

array(5) {
  [0]=>
  string(10) "2018-02-05"
  [1]=>
  string(10) "2018-02-06"
  [2]=>
  string(10) "2018-02-07"
  [3]=>
  string(10) "2018-02-08"
}

我想将另一个日期(2018-02-09)推送到数组,仅当连续日期与新日期最多为5时。所以推2018-02-09应该没问题,但在那之后,我不应该推2018-02-10,因为这将是连续6个日期。 Althouh,而不是推2018-02-10我应该能够推2018-02-11,因为在5之后有一个免费的日子。

3 个答案:

答案 0 :(得分:0)

$thisDay = '2018-02-05';
$datesArray = array();
$datesArray[0] = $thisDay;
$count = 1;
while(count($datesArray) < 5){

    $next_date = date('Y-m-d', strtotime($thisDay .' +'.$count.' day'));
    $dayofweek = date('w', strtotime($next_date));
      if($dayofweek != 6){
        $datesArray[] = $next_date;
        $count++;
      } else {
          count++;
      }
 }

 var_dump($datesArray);

U还可以使用DateTime

设置当前日期

希望我的回答能帮到你。

答案 1 :(得分:0)

如果连续五天,该功能会添加给定日期:

function array_push_continuous(&$array, $date) {

    // shorcut for array with less than 5 dates :
    if (count($array) < 5) {
        array_push($array, $date) ;
        return true ;
    } 

    // shortcut if the last date is different : 
    if (date("Y-m-d", strtotime(end($array)) + 24*3600) != $date) {
        array_push($array, $date) ;
        return true ;
    }

    // check for last 5 continuous :
    $lasts = array_reverse(array_slice($array, -5)) ;
    $last = array_shift($lasts) ;

    foreach ($lasts as $item) {
        if (date("Y-m-d", strtotime($item) + 24*3600) == $last) {
            $last = $item ;
        }else{
            array_push($array, $date) ;
            return true ;
        }
    }
    return false ;
}

用法:

$array = array(
  "2018-02-05",
  "2018-02-06",
  "2018-02-07",
  "2018-02-08",
  "2018-02-09",
);

array_push_continuous($array, "2018-02-10") ; // false
array_push_continuous($array, "2018-02-11") ; // true
array_push_continuous($array, "2018-02-12") ; // true
array_push_continuous($array, "2018-02-13") ; // true
array_push_continuous($array, "2018-02-14") ; // true
array_push_continuous($array, "2018-02-15") ; // true
array_push_continuous($array, "2018-02-16") ; // false
array_push_continuous($array, "2018-02-17") ; // true
array_push_continuous($array, "2018-02-18") ; // true

print_r($array);

输出:

Array
(
    [0] => 2018-02-05
    [1] => 2018-02-06
    [2] => 2018-02-07
    [3] => 2018-02-08
    [4] => 2018-02-09
    [5] => 2018-02-11
    [6] => 2018-02-12
    [7] => 2018-02-13
    [8] => 2018-02-14
    [9] => 2018-02-15
    [10] => 2018-02-17
    [11] => 2018-02-18
)

答案 2 :(得分:0)

如果要推送给定日期,则可以使用此功能。

udf