查找范围内缺少的日期(php)

时间:2013-06-05 04:56:00

标签: php

我想确定PHP数组中缺少的日期

例如

此范围

2013-06-12
2013-06-13
2013-06-26
2013-06-27
2013-06-29

缺少以下日期:

2013-06-14
2013-06-15
2013-06-16
...
2013-06-24
2013-06-25
2013-06-28

如何识别缺失的日期?

1 个答案:

答案 0 :(得分:7)

这是获取数组中所有缺少日期的好方法:

<?php
$myDates = array("2013-06-12", "2013-06-13", "2013-06-26", "2013-06-27", "2013-06-29");
$missingDates = array();

$dateStart = date_create("2013-06-01");
$dateEnd   = date_create("2013-06-".date("t", mktime(0, 0, 0, 6, 1, 2013)));
$interval  = new DateInterval('P1D');
$period    = new DatePeriod($dateStart, $interval, $dateEnd);
foreach($period as $day) {
  $formatted = $day->format("Y-m-d");
  if(!in_array($formatted, $myDates)) $missingDates[] = $formatted;
}

print_r($missingDates);
?>

这将导致:

Array
(
    [0] => 2013-06-01
    [1] => 2013-06-02
    [2] => 2013-06-03
    [3] => 2013-06-04
    [4] => 2013-06-05
    [5] => 2013-06-06
    [6] => 2013-06-07
    [7] => 2013-06-08
    [8] => 2013-06-09
    [9] => 2013-06-10
    [10] => 2013-06-11
    [11] => 2013-06-14
    [12] => 2013-06-15
    [13] => 2013-06-16
    [14] => 2013-06-17
    [15] => 2013-06-18
    [16] => 2013-06-19
    [17] => 2013-06-20
    [18] => 2013-06-21
    [19] => 2013-06-22
    [20] => 2013-06-23
    [21] => 2013-06-24
    [22] => 2013-06-25
    [23] => 2013-06-28
    [24] => 2013-06-30
)