PHPで質問です。

今日の日を取得し、そこから14日分の配列を作りたいのですがどのような方法が良いでしょうか?
例えば、
$week = array(
array("20081201","12/01"),
array("20081202","12/02"),
(省略)
array("20081213","12/13"),
)
みたいな配列と、
$week2 = array(
array("year" => "2008","mon" => "12","day" => "01"),
array("year" => "2008","mon" => "12","day" => "02"),
(省略)
array("year" => "2008","mon" => "12","day" => "13"),
)
のような配列が欲しいです。

やってはみたのですが、月、年をまたいだ処理が分かりません。
お願いいたします。

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

ベストアンサー

id:Quphondi No.3

回答回数59ベストアンサー獲得回数2

ポイント40pt

strttotimeを使うとこう書けます。冗長に書いてます。

// 変数初期化(無くても動きます)
$week = array();
$week2 = array();

$date = date("Ymd");

for($i=0; $i<14; $i++){

  $timestamp = strtotime("$date + $i day"); // ここが肝

  $ymd = date("Ymd",$timestamp);
  $md = date("m/d",$timestamp);
  $week[] = array($ymd,$md);

  $y = date("Y",$timestamp);
  $m = date("m",$timestamp);
  $d = date("d",$timestamp);

  $week2[] = array("year"=>$y,"mon"=>$m,"day"=>$d);

}

print("<pre>");
print_r($week);
print_r($week2);
print("</pre>");

5行目の

$date = date("Ymd");
|<<

を次のようにすれば、年またぎ・月またぎの処理がされていることが確認できます。

>||
$date = date("Ymd",strtotime("20081226"));
id:norif_h

ありがとうございます。

参考にさせていただきます。

2008/12/14 03:13:44

その他の回答3件)

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

ポイント30pt

こんなことでしょうか?

<?php
$currentYear = date('Y');
$currentMonth = date('m');
$currentDay = date('d');

$result1 = array();
$result2 = array();
for ($i = 0; $i < 14; ++$i) {
        $stamp = mktime(0, 0, 0, $currentMonth, $currentDay + $i, $currentYear);
        $result1[] = array(date('Ymd', $stamp), date('m/d', $stamp));
        $result2[] = array('year' => date('Y', $stamp), 'mon' => date('m', $stamp), 'day' => date('d', $stamp));
}

print_r ($result1);
print_r ($result2);
?>

mktimeでタイムスタンプを作成して、dateでフォーマット出力する。

色々な部分で利用できるので便利です。

直接は関係ないですが、mktimeで、m月0日と指定すると、(m-1)月の最終日を取得できたりと、色々使えます。


何かの参考になれば。

id:norif_h

ありがとうございます。

参考にさせていただきます。

2008/12/14 03:13:49
id:masashi0316 No.2

回答回数16ベストアンサー獲得回数0

ポイント10pt
$week = array();
$now = time();

for($i = 0; $i < 14; $i++) {
    $time = $now + (86400 * $i);
    $week[$i]['year'] = date("Y",$time);
    $week[$i]['month'] = date("m",$time);
    $week[$i]['day'] = date("d",$time);
    $week[$i]['date'] = date("Ymd",$time);
}

などでいかがでしょう?

id:norif_h

ありがとうございます。

参考にさせていただきます。

2008/12/14 03:13:47
id:Quphondi No.3

回答回数59ベストアンサー獲得回数2ここでベストアンサー

ポイント40pt

strttotimeを使うとこう書けます。冗長に書いてます。

// 変数初期化(無くても動きます)
$week = array();
$week2 = array();

$date = date("Ymd");

for($i=0; $i<14; $i++){

  $timestamp = strtotime("$date + $i day"); // ここが肝

  $ymd = date("Ymd",$timestamp);
  $md = date("m/d",$timestamp);
  $week[] = array($ymd,$md);

  $y = date("Y",$timestamp);
  $m = date("m",$timestamp);
  $d = date("d",$timestamp);

  $week2[] = array("year"=>$y,"mon"=>$m,"day"=>$d);

}

print("<pre>");
print_r($week);
print_r($week2);
print("</pre>");

5行目の

$date = date("Ymd");
|<<

を次のようにすれば、年またぎ・月またぎの処理がされていることが確認できます。

>||
$date = date("Ymd",strtotime("20081226"));
id:norif_h

ありがとうございます。

参考にさせていただきます。

2008/12/14 03:13:44
id:GoldenDawn No.4

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

ポイント10pt
<?php
function get14days() {
  $result = array() ;
  for ($i = 0, $t = time(); $i < 14; ++$i, $t += 24*60*60) {
    $result[] = array(date('Ymd', $now), date('m/d', $t)) ;
  }
  return $result ;
}

function get14days2() {
  $result = array() ;
  for ($i = 0, $t = time(); $i < 14; ++$i, $t += 24*60*60) {
    $result[] = array_combine(array('year', 'mon', 'day'), explode('/', date('Y/m/d', $t))) ;
  }
  return $result ;
}

print_r(get14days()) ;
print_r(get14days2()) ;
?>
id:norif_h

ありがとうございます。

参考にさせていただきます。

2008/12/14 03:13:43

コメントはまだありません

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

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

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

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