0

隔週の日付を表示するために、以下の作成時間を作成しました

<?php
  $date1 = "07/05/2013";
  $date2 = date('M j, Y', strtotime($date1 . " + 14 day"));
  $date3 = date('M j, Y', strtotime($date2 . " + 14 day"));
  $date4 = date('M j, Y', strtotime($date3 . " + 14 day"));
  $date5 = date('M j, Y', strtotime($date4 . " + 14 day"));
  $date6 = date('M j, Y', strtotime($date5 . " + 14 day"));
  $date7 = date('M j, Y', strtotime($date6 . " + 14 day"));
  $date8 = date('M j, Y', strtotime($date7 . " + 14 day"));
  $date9 = date('M j, Y', strtotime($date8 . " + 14 day"));
  $date10 = date('M j, Y', strtotime($date9 . " + 14 day"));
  $date11 = date('M j, Y', strtotime($date10 . " + 14 day"));
  $date12 = date('M j, Y', strtotime($date11 . " + 14 day"));
  $date13 = date('M j, Y', strtotime($date12 . " + 14 day"));
  $date14 = date('M j, Y', strtotime($date13 . " + 14 day"));
  $date15 = date('M j, Y', strtotime($date14 . " + 14 day"));
  $date16 = date('M j, Y', strtotime($date15 . " + 14 day"));
  $date17 = date('M j, Y', strtotime($date16 . " + 14 day"));
  $date18 = date('M j, Y', strtotime($date17 . " + 14 day"));
?>

月ごとにグループ化するにはどうすればよいですか?8 月または 12 月にいくつの日付が到着するか知りたいとしましょう。また、年末までにいくつの日付を取得したい場合は? 助けていただければ幸いです。

4

4 に答える 4

1

月ごとにグループ化することについて正確に何を意味するのかわかりませんでしたが、これは配列を使用してすべての日付を宣言し、$limit 変数を変更して日付の量を増減できます。元の日付を調整するために $dates を変更します

<?php
$limit = 17;
$dates = array("07-05-2013");
for ($i=1; $i<=$limit; $i++){
    $dates[$i]=date('d-m-Y', strtotime($dates[$i-1] . "+ 14 days"));
}
foreach (array_keys($dates) as $key){ 
    $value = date('m', strtotime($dates[$key])); 
    if ($value == "08"){
        $amount = $amount + 1;  
    }
    if ($amount == 1){
        $left = $limit-$key;
    }
}
print_r ($dates);
echo "<br>";
echo $amount . "<br>" . $left;
?>
于 2013-07-18T20:05:12.983 に答える
0

SO について繰り返し説明しているように、PHP のDateTime クラスはほとんどの日時操作を簡単にします。

あなたの質問は100%明確ではありませんが、あなたのコメントから、月ごとに14日離れたタイムスタンプの配列が必要なようです. 月が年の束縛を超える可能性があると考えたかどうかはわかりませんが、回答ではそれを考慮しました.

以下のコードは、あなたが望むことをするはずです:-

$start = \DateTime::createFromFormat('d/m/Y', '07/05/2013');
$interval = new \DateInterval('P14D');
$periods = new \DatePeriod($start, $interval, 26);

$dates = array();

foreach($periods as $day){
    /** @var \DateTime $day */
    $dates[$day->format('Y')][$day->format('M')][] = $day->getTimestamp();
}

var_dump($dates);

出力:-

array (size=2)
  2013 => 
    array (size=8)
      'May' => 
        array (size=2)
          0 => int 1367936286
          1 => int 1369145886
      'Jun' => 
        array (size=2)
          0 => int 1370355486
          1 => int 1371565086
      'Jul' => 
        array (size=3)
          0 => int 1372774686
          1 => int 1373984286
          2 => int 1375193886
      'Aug' => 
        array (size=2)
          0 => int 1376403486
          1 => int 1377613086
      'Sep' => 
        array (size=2)
          0 => int 1378822686
          1 => int 1380032286
      'Oct' => 
        array (size=2)
          0 => int 1381241886
          1 => int 1382451486
      'Nov' => 
        array (size=2)
          0 => int 1383664686
          1 => int 1384874286
      'Dec' => 
        array (size=3)
          0 => int 1386083886
          1 => int 1387293486
          2 => int 1388503086
  2014 => 
    array (size=5)
      'Jan' => 
        array (size=2)
          0 => int 1389712686
          1 => int 1390922286
      'Feb' => 
        array (size=2)
          0 => int 1392131886
          1 => int 1393341486
      'Mar' => 
        array (size=2)
          0 => int 1394551086
          1 => int 1395760686
      'Apr' => 
        array (size=2)
          0 => int 1396966686
          1 => int 1398176286
      'May' => 
        array (size=1)
          0 => int 1399385886

タイムスタンプの配列の代わりに、代わりに DateTime オブジェクトの配列を使用することをお勧めします。その後、必要に応じてそれぞれを操作できます。その場合、コードは次のようになります。

$start = \DateTime::createFromFormat('d/m/Y', '07/05/2013');
$interval = new \DateInterval('P14D');
$periods = new \DatePeriod($start, $interval, 26);

$dates = array();

foreach($periods as $day){
    /** @var \DateTime $day */
    $dates[$day->format('Y')][$day->format('M')][] = $day;
}
于 2013-07-19T14:26:51.557 に答える