例えば、
$from = "2007-10-10";
$to = "2008-03-30";
だったとして、
echo $result;
の結果が array("2007-11","2007-12",2008-01","2008-02","2008-03");
となるようなコードを教えてください。
・どの変数も日付型です。
・概念的に言うと $from <= $result <= $to です。
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 ); ?>
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 ); ?>
<?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)) ; ?>
コメント(2件)
どうやら質問の仕方が悪い事に気がつき、←スミマセン
自力で以下の方法で解決できました。
■誤っていた点
・結果の形式:
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)) ;
?>
||<