21

たとえば、次のようになります。

  1. 1 月の第 3 月曜日、 マーティン・ルーサー・キング・デー
  2. 2 月の第 3 月曜日は 大統領の日 (ワシントンの誕生日)
  3. イースターのための3月の最後の日曜日
  4. メモリアルデーのための5月の最終月曜日

これらの日付を取得しようとしています。これにより、今後数年間すべてを手動で入力することなく、カレンダーにマークを付けることができます。


修正された答え!!

$curYir = date("Y");//current year

$MLK = date('Y-m-d', strtotime("january $curYir third monday")); //marthin luthor king day
$PD = date('Y-m-d', strtotime("february $curYir third monday")); //presidents day
$Est =  date('Y-m-d', easter_date($curYir))); // easter 
$MDay = date('Y-m-d', strtotime("may $curYir first monday")); // memorial day
//("may $curYir last monday") will give you the last monday of may 1967
//much better to determine it by a loop
      $eMDay = explode("-",$MDay);
      $year = $eMDay[0];
      $month = $eMDay[1];
      $day = $eMDay[2];

      while($day <= 31){
          $day = $day + 7;
      }
      if($day > 31)
      $day = $day - 7;

      $MDay = $year.'-'.$month.'-'.$day;
$LD = date('Y-m-d', strtotime("september $curYir first monday"));  //labor day
$CD = date('Y-m-d', strtotime("october $curYir third monday")); //columbus day
$TH = date('Y-m-d', strtotime("november $curYir first thursday")); // thanks giving 
//("november $curYir last thursday") will give you the last thursday of november 1967
//much better to determine it by a loop
      $eTH = explode("-",$TH);
      $year = $eTH[0];
      $month = $eTH[1];
      $day = $eTH[2];

      while($day <= 30){
          $day = $day + 7;
      }
      if($day > 30)
      //watch out for the days in the month November only have 30
      $day = $day - 7;

      $TH = $year.'-'.$month.'-'.$day;
4

6 に答える 6

15

php のこの機能を活用できます。strtotime

$currentYear = date("Y");

MLKの日 -

echo date('Y-m-d', strtotime("third monday of january $currentYear"));

大統領の日 -

echo date('Y-m-d', strtotime("third monday/OD February $currentYear"));

イースター -

echo date('Y-m-d', strtotime("last sunday of march $currentYear"));

記念日 -

echo date('Y-m-d', strtotime("last monday of may $currentYear"));
于 2013-02-16T06:28:33.473 に答える