「みんな教えて! 選手権!!」開催のお知らせ

任意の期間(自~至)を指定して、
その間の日付を1日単位で取得したいのですが
うまい方法が思いつきません。
こうすれば簡単だというアルゴリズムがあれば
教えてください。

例)
開始日 $start '2005/06/29'
終了日 $end '2005/07/02'
というデータがあれば
2005/06/29
2005/06/30
2005/07/01
2005/07/02
を取得したいのです。

A 回答 (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);
?>

以上、ご参考までに。
    • good
    • 0
この回答へのお礼

サンプルまで作成していただきありがとうございます。

こちらでは
mkdateを使用して通算秒数に変換しているという事
ですね。

ループが簡潔にできていてこんな事が出来るのかと
驚いています。

予想以上に簡単に出来ました。ありがとうございます。

お礼日時:2005/06/21 14:49

時間が無いので、方法論だけ書きます。



1)strtotime関数を使って、開始日の通算秒を取得します。

2)1日は86400秒ですから、取得した通算秒に86400を足していくと、1日ずつ日付がずれていきます。

3)86400足すたびに、date関数を使って、日付文字列を取得します。

4)通算秒が、終了日の数値に追いつくまで、この処理を繰り返します。

と、こんな感じではないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。

通算の秒数はdate関数で元の日付形式に
戻せるのですね。

簡単なロジックで実現できそうです。

お礼日時:2005/06/21 14:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報