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

【PHP】指定した2つの日付範囲の間に含まれる各曜日の日数をカウントするプログラム

PHPで指定した2つの日付範囲(開始日〜終了日)の間に、各曜日がそれぞれ何日含まれるのかを求める方法を紹介します。DateTimeクラスとdate関数を組み合わせることで、シンプルなコードで実装できます。

サンプルコード

<?php
    $start = "11-11-2019";
    $end = "12-12-2019";
    $week_day = array('Monday' => 0,
    'Tuesday' => 0,
    'Wednesday' => 0,
    'Thursday' => 0,
    'Friday' => 0,
    'Saturday' => 0,
    'Sunday' => 0);
    $start = new DateTime($start);
    $end = new DateTime($end);
    while($start <= $end )
    {
       $time_stamp = strtotime($start->format('d-m-Y'));
       $week = date('l', $time_stamp);
       $week_day[$week] = $week_day[$week] + 1;
       $start->modify('+1 day');
    }
    print_r("The number of days between the given range is");
    print_r($week_day);
?>

出力結果

The number of days between the given range isArray
(
    [Monday] => 5
    [Tuesday] => 5
    [Wednesday] => 5
    [Thursday] => 5
    [Friday] => 4
    [Saturday] => 4
    [Sunday] => 4
)

コードの解説

まず、DateTime型として開始日「$start」と終了日「$end」を定義します。同時に、月曜日から日曜日までの7つの曜日をキーとする配列「$week_day」を作成し、すべてのカウントを初期値「0」に設定しておきます。

whileループの中では、現在の日付をstrtotime関数でタイムスタンプに変換し、さらにdate関数に「l」(小文字のL)フォーマットを指定することで、その日付の曜日名(Monday、Tuesdayなど)を取得します。そして、取得した曜日名をキーとして、対応するカウントを1ずつ加算していきます。

最後に、modify('+1 day')メソッドで日付を1日進め、開始日が終了日に達するまでこの処理を繰り返します。これにより、指定期間内に各曜日が何回登場したかが自動的に集計され、print_r関数によって結果が出力されます。

上記の出力例では、2019年11月11日から12月12日までの期間において、月曜日から木曜日まではそれぞれ5日、金曜日から日曜日まではそれぞれ4日含まれていることが確認できます。この手法は、勤務日数の集計やスケジュール管理アプリなど、曜日ごとの統計が必要な場面で活用できます。

  1. Pythonで2つの日付の間の日数を求める方法

    2つの日付の間の日数を求めるには、Pythonの標準ライブラリである datetime モジュールを使用します。datetime モジュールには日付を扱うための date クラスが用意されており、dateオブジェクト同士を減算すると、その差が timedelta オブジェクトとして返されます。このオブジェクトの days 属性を参照することで、日数を簡単に取得できます。手順1:必要なライブラリをインポートするまず、datetime モジュールから date クラスをインポートします。from datetime import date手順2:dateオブジェクトを作成する次に、日数を計算したい2

  2. Pythonで2つの日付の間の日数を計算する方法を解説

    Pythonでは、シンプルな日付演算を使うことで、2つの日付の間の日数を簡単に計算できます。日数の差を求めたい2つの日付を定義し、それらを引き算すると timedelta オブジェクトが得られます。このオブジェクトの days プロパティを参照することで、目的の日数を取得できます。基本的な手順datetime モジュールから date クラスをインポートします。差を求めたい2つの日付を date オブジェクトとして定義します。2つの日付を引き算して timedelta オブジェクトを生成します。days プロパティの値を出力します。サンプルコードfrom datetime import dat