Вернуть все даты между двумя датами в массиве в PHP

Опубликовано: 4 Февраля, 2022

Даны две даты (дата начала и дата окончания), и задача состоит в том, чтобы вернуть все даты в массиве.

Example 1: In this example, use date interval class which stores fixed amount of time (in years, months, days, hours etc) or relative time string in the format that DateTime.

<?php
  
// Function to get all the dates in given range
function getDatesFromRange($start, $end, $format = "Y-m-d") {
      
    // Declare an empty array
    $array = array();
      
    // Variable that store the date interval
    // of period 1 day
    $interval = new DateInterval("P1D");
  
    $realEnd = new DateTime($end);
    $realEnd->add($interval);
  
    $period = new DatePeriod(new DateTime($start), $interval, $realEnd);
  
    // Use loop to store date into array
    foreach($period as $date) {                 
        $array[] = $date->format($format); 
    }
  
    // Return the array elements
    return $array;
}
  
// Function call with passing the start date and end date
$Date = getDatesFromRange("2010-10-01", "2010-10-05");
  
var_dump($Date);
  
?>
Output:
array(5) {
  [0]=>
  string(10) "2010-10-01"
  [1]=>
  string(10) "2010-10-02"
  [2]=>
  string(10) "2010-10-03"
  [3]=>
  string(10) "2010-10-04"
  [4]=>
  string(10) "2010-10-05"
}

Example 2: This example use strtotime() function which is used to convert an English textual date-time description to a UNIX timestamp. It returns a timestamp on success, False otherwise.

<?php
  
// Declare two dates
$Date1 = "01-10-2010";
$Date2 = "05-10-2010";
  
// Declare an empty array
$array = array();
  
// Use strtotime function
$Variable1 = strtotime($Date1);
$Variable2 = strtotime($Date2);
  
// Use for loop to store dates into array
// 86400 sec = 24 hrs = 60*60*24 = 1 day
for ($currentDate = $Variable1; $currentDate <= $Variable2
                                $currentDate += (86400)) {
                                      
$Store = date("Y-m-d", $currentDate);
$array[] = $Store;
}
  
// Display the dates in array format
print_r($array);
?>
Output:
Array
(
    [0] => 2010-10-01
    [1] => 2010-10-02
    [2] => 2010-10-03
    [3] => 2010-10-04
    [4] => 2010-10-05
)