• ベストアンサー

指定した期間の日付生成

任意の期間(自~至)を指定して、 その間の日付を1日単位で取得したいのですが うまい方法が思いつきません。 こうすれば簡単だというアルゴリズムがあれば 教えてください。 例) 開始日 $start '2005/06/29' 終了日 $end '2005/07/02' というデータがあれば 2005/06/29 2005/06/30 2005/07/01 2005/07/02 を取得したいのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • unimentai
  • ベストアンサー率70% (34/48)
回答No.2

#1の方のアルゴリズムで全く問題ないのですが、 strtotimeは日本人の私には扱いづらいので、 mktimeを良く使っています。 <?php // 入力データ $start = "2005/06/29"; $end = "2005/07/02"; // UNIXタイムスタンプ取得 list($sy,$sm,$sd) = explode("/",$start); list($ey,$em,$ed) = explode("/",$end); $su = mktime(0,0,0,$sm,$sd,$sy); $eu = mktime(0,0,0,$em,$ed,$ey); // 1日の秒数 $sec = 60 * 60 * 24; // 60秒 × 60分 × 24時間 // 日付取得 $key = 0; for ( $i = $su;$i <= $eu;$i += $sec ) { $dates[$key] = date("Y/m/d",$i); $key ++; } // 表示 print_r($dates); ?> 以上、ご参考までに。

ubaba12
質問者

お礼

サンプルまで作成していただきありがとうございます。 こちらでは mkdateを使用して通算秒数に変換しているという事 ですね。 ループが簡潔にできていてこんな事が出来るのかと 驚いています。 予想以上に簡単に出来ました。ありがとうございます。

その他の回答 (1)

  • you-m
  • ベストアンサー率58% (190/327)
回答No.1

時間が無いので、方法論だけ書きます。 1)strtotime関数を使って、開始日の通算秒を取得します。 2)1日は86400秒ですから、取得した通算秒に86400を足していくと、1日ずつ日付がずれていきます。 3)86400足すたびに、date関数を使って、日付文字列を取得します。 4)通算秒が、終了日の数値に追いつくまで、この処理を繰り返します。 と、こんな感じではないでしょうか。

ubaba12
質問者

お礼

ありがとうございます。 通算の秒数はdate関数で元の日付形式に 戻せるのですね。 簡単なロジックで実現できそうです。