[PHP]指定した日付の範囲を配列にする

Read More

指定した日付の範囲を配列にする。


やりたかったのは指定した年月範囲配列にすること。


こんなイメージ↓↓↓

ex)
指定する範囲:
2013/102014/10

欲しい結果:
array(
'2014/10' => '2014/10',
'2014/09' => '2014/09',
'2014/08' => '2014/08',
'2014/07' => '2014/07',
'2014/06' => '2014/06',
'2014/05' => '2014/05',
'2014/04' => '2014/04',
'2014/03' => '2014/03',
'2014/02' => '2014/02',
'2014/01' => '2014/01',
'2013/12' => '2013/12',
'2013/11' => '2013/11',
'2013/10' => '2013/10',
)



で、下のがそれを可能にするもの。


■指定した年月の範囲を配列にする
<?php
$start = strtotime('2013/10/01');
$end = strtotime('2014/10/01');

$ret=array();
$temp = $end;
while($temp >= $start){
  $ret[(date('Y/m', $temp))] = date('Y/m', $temp);
  $temp = strtotime('-1 month', $temp);
}// end while

print_r($ret);
?>



■結果
array(
  '2014/10' => '2014/10',
  '2014/09' => '2014/09',
  '2014/08' => '2014/08',
  '2014/07' => '2014/07',
  '2014/06' => '2014/06',
  '2014/05' => '2014/05',
  '2014/04' => '2014/04',
  '2014/03' => '2014/03',
  '2014/02' => '2014/02',
  '2014/01' => '2014/01',
  '2013/12' => '2013/12',
  '2013/11' => '2013/11',
  '2013/10' => '2013/10',
)


キモとなるのはstrtotime()

範囲を指定するところでは年月だけでなく日までを指定する必要がある。
このため仮の日"/01"を加えている。

あとはwhileでぶん回すところだが、
strtotime()の第1引数には以下のようなステップ数を指定できる。

■strtotime()の第1引数に指定できる文字列の例
'-1 month'  // 1ヶ月減
'-1 day'    // 1日減
'-1 year'   // 1年減
'-1 hour'   // 1時間減
上記以外にも色々な指定が可能。



ちなみにできあがった配列の並びを逆にしたいのなら結果配列にksort()を使えばよい。




先述したプログラムを少しいじるだけで以下のようなものが作れる。



■年月日の範囲の配列を作る
ex)
2014/9/27 ~ 2014/10/09

array(
'2014/10/09' => '2014/10/09',
'2014/10/08' => '2014/10/08',
'2014/10/07' => '2014/10/07',
'2014/10/06' => '2014/10/06',
'2014/10/05' => '2014/10/05',
'2014/10/04' => '2014/10/04',
'2014/10/03' => '2014/10/03',
'2014/10/02' => '2014/10/02',
'2014/10/01' => '2014/10/01',
'2014/09/30' => '2014/09/30',
'2014/09/29' => '2014/09/29',
'2014/09/28' => '2014/09/28',
'2014/09/27' => '2014/09/27',
)


■年の範囲
ex)
2006 ~ 2014

array(
'2014' => '2014',
'2013' => '2013',
'2012' => '2012',
'2011' => '2011',
'2010' => '2010',
'2009' => '2009',
'2008' => '2008',
'2007' => '2007',
'2006' => '2006',
)


■年月日時の範囲
ex)
2014/10/08 20:00 ~ 2014/10/09 01:00

array(
'2014/10/09 01:00' => '2014/10/09 01:00',
'2014/10/09 00:00' => '2014/10/09 00:00',
'2014/10/08 23:00' => '2014/10/08 23:00',
'2014/10/08 22:00' => '2014/10/08 22:00',
'2014/10/08 21:00' => '2014/10/08 21:00',
'2014/10/08 20:00' => '2014/10/08 20:00',
)







--
関数化するのはやめた。

するほどのもんでもないってことで。