PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

【PHP入門】2つの日付の間のすべての日付を配列で取得する方法

PHPでは、strtotime()関数とwhileループを組み合わせることで、指定した2つの日付の間に存在するすべての日付を配列として簡単に取得できます。この記事では、その実装方法をサンプルコードとともに解説します。

日付範囲を取得するサンプルコード

以下のコードは、開始日と終了日の間のすべての日付を配列として返すカスタム関数 displayDates() の例です。

<?php
    function displayDates($date1, $date2, $format = 'd-m-Y') {
        $dates = array();
        $current = strtotime($date1);
        $date2 = strtotime($date2);
        $stepVal = '+1 day';
        while ($current <= $date2) {
            $dates[] = date($format, $current);
            $current = strtotime($stepVal, $current);
        }
        return $dates;
    }
    $date = displayDates('2019-11-10', '2019-11-20');
    var_dump($date);
?>

コードの解説

  • $format: 出力する日付の形式を指定します。デフォルトは「d-m-Y」(日-月-年)です。
  • strtotime(): 日付文字列をUnixタイムスタンプ(秒数)に変換します。
  • $stepVal: 「+1 day」を指定することで、1日ずつ加算しながらループ処理を行います。
  • while ループ: 開始日のタイムスタンプが終了日のタイムスタンプ以下である間、各日付をフォーマットして配列に格納していきます。

実行結果

上記のコードを実行すると、2019年11月10日から2019年11月20日までの11日分の日付が配列として出力されます。

array(11) {
    [0]=>
    string(10) "10-11-2019"
    [1]=>
    string(10) "11-11-2019"
    [2]=>
    string(10) "12-11-2019"
    [3]=>
    string(10) "13-11-2019"
    [4]=>
    string(10) "14-11-2019"
    [5]=>
    string(10) "15-11-2019"
    [6]=>
    string(10) "16-11-2019"
    [7]=>
    string(10) "17-11-2019"
    [8]=>
    string(10) "18-11-2019"
    [9]=>
    string(10) "19-11-2019"
    [10]=>
    string(10) "20-11-2019" 
}

補足:DateTimeクラスを使った別の方法

PHP 5.3以降では、DatePeriodクラスとDateTimeクラスを組み合わせることでも同様の処理が可能です。オブジェクト指向で書きたい場合や、より柔軟な日付操作が必要な場合におすすめです。

<?php
    $begin = new DateTime('2019-11-10');
    $end = new DateTime('2019-11-20');
    $end = $end->modify('+1 day'); // 終了日も含めるため1日加算

    $interval = new DateInterval('P1D'); // 1日間隔
    $daterange = new DatePeriod($begin, $interval, $end);

    foreach ($daterange as $date) {
        echo $date->format("d-m-Y") . "\n";
    }
?>

用途に応じて、シンプルなstrtotime()方式かオブジェクト指向的なDatePeriod方式を選択するとよいでしょう。

  1. PHPのmb_list_encodings()関数でサポートされている全エンコーディングを配列として取得する方法

    PHPのmb_list_encodings()関数は、現在の環境でサポートされているすべての文字エンコーディングを配列として返します。この関数はPHP 5以降のバージョンで利用可能です。マルチバイト文字列処理を行う際に、対応しているエンコーディングの一覧を確認したい場合に便利な関数です。構文array mb_list_encodings()パラメータmb_list_encodings()は引数を受け取りません。戻り値この関数は、サポートされているエンコーディング名を格納した数値インデックス付きの配列を返します。各要素には「UTF-8」や「SJIS」などのエンコーディング名が文字列として含まれま

  2. Excelで2つの日付の間のすべての日付を抽出して一覧表示する2つの方法

    スケジュール表や活動記録など、日付ごとの表を作成しなければならない場面はよくあります。そのような場合、日付のリストが必要になります。リストには必ず開始日と終了日があり、その間のすべての日付を列挙する必要があります。 Excelで2つの日付間の全日付を一覧表示する方法 この記事では、指定した2つの日付の間にあるすべての日付を、1つの列にリストとして取得する方法を紹介します。やり方は主に次の2つです。 フィルハンドルを使って連続した日付のリストを作成する 数式を使って2つの日付間のすべての日付を取得する 方法1:フィルハンドルで連続日付のリストを作成する Microsoft Excelには「