phpについて質問です。

例えば、
$from = "2007-10-10";
$to = "2008-03-30";
だったとして、
echo $result;
の結果が array("2007-11","2007-12",2008-01","2008-02","2008-03");
となるようなコードを教えてください。
・どの変数も日付型です。
・概念的に言うと $from <= $result <= $to です。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/11/04 20:12:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント80pt

php には日付型という型はないので、文字列から日付情報(mktime等を使用)にするか、

そのまま文字列として処理をするかになります。

http://php.benscom.com/manual/ja/language.types.php

http://php.benscom.com/manual/ja/book.datetime.php


今回のケースでは後者が簡単に思えますので、そのような実装例です。

例では $from < $result <= $to のようになっていますので、コードもそのように

なっています。

<?php
$from = "2007-10-10";
$to = "2008-03-30";

$far = explode( "-", $from );
$tar = explode( "-", $to );

for( $yy = $far[0] ; $yy<=$tar[0] ; $yy++ ) {
	$sm = 1;
	$em = 12;
    if ( $yy == $far[0] )
       $sm = $far[1] + 1;
    if ( $yy == $tar[0] )
       $em = $tar[1];
    for( $mm = $sm ; $mm<=$em ; $mm++ )
    	$result[] = $yy."-".substr("0".$mm, -2);
}
print_r( $result );
?>

その他の回答1件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント80pt

php には日付型という型はないので、文字列から日付情報(mktime等を使用)にするか、

そのまま文字列として処理をするかになります。

http://php.benscom.com/manual/ja/language.types.php

http://php.benscom.com/manual/ja/book.datetime.php


今回のケースでは後者が簡単に思えますので、そのような実装例です。

例では $from < $result <= $to のようになっていますので、コードもそのように

なっています。

<?php
$from = "2007-10-10";
$to = "2008-03-30";

$far = explode( "-", $from );
$tar = explode( "-", $to );

for( $yy = $far[0] ; $yy<=$tar[0] ; $yy++ ) {
	$sm = 1;
	$em = 12;
    if ( $yy == $far[0] )
       $sm = $far[1] + 1;
    if ( $yy == $tar[0] )
       $em = $tar[1];
    for( $mm = $sm ; $mm<=$em ; $mm++ )
    	$result[] = $yy."-".substr("0".$mm, -2);
}
print_r( $result );
?>
id:GoldenDawn No.2

回答回数426ベストアンサー獲得回数81

ポイント100pt
<?php
function f($from, $to) {
  $result = array() ;
  for ($d = strtotime($from);
       $d < strtotime($to);
       $d = strtotime(end($result)."-1 1 month"))
    $result[] = date("Y-m", $d) ;

  array_shift($result) ;
  return $result ;
}

$from = "2007-10-10" ;
$to = "2008-03-30" ;

print_r(f($from, $to)) ;
?>
  • id:kou32rr
    解決できました。ありがとうございました。
    どうやら質問の仕方が悪い事に気がつき、←スミマセン
    自力で以下の方法で解決できました。

    ■誤っていた点
    ・結果の形式:
      2008-01 → 2008-01-01 (常に毎月の1日)
      の方が後々の再利用考えたら良い。
    ・結果の初めの月

    ■修正コード(GoldenDawn 様ベース)
    >||
    <?php
    function f($from, $to){
    $result = array() ;
    //月数を計算
    $col = 12 * (substr($to,0,4) - substr($from,0,4))
    + (substr($to,5,2) - substr($from,5,2));

    $start = strtotime($from);
    $result[] = date("Y-m-01", $start);

    for ($i = 1; $i <= $col; $i++) {
    $next = strtotime($from." +" . $i . " month");
    $result[$i] = date("Y-m-01", $next);
    }
    $from = "2007-10-10" ;
    $to = "2008-03-30" ;

    print_r(f($from, $to)) ;
    ?>
    ||<
  • id:kou32rr
    コメントには スーパーpre記法 使えないんですね。。。(。。;)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません