1

最初に、特定の日が特定の日付に何回該当するかを表示する関数を作成しようとしています。たとえば、土曜日が特定の年の 1 月 1 日に何回該当するかなどです。

<?php 

$firstDate = '01/01/2000';
$endDate = '01/01/2012';
$newYearDate= '01/01';

# convert above string to time
$time1 = strtotime($firstDate);
$time2 = strtotime($endDate);
$newYearTime = strtotime($newYearDate);

for($i=$time1; $i<=$time2; $i++){
    $saturday = 0;
    $chk = date('D', $newYearTime); #date conversion
   if($chk == 'Sat' && $chk == $newYearTime){ 
      $saturday++;    
      } 
}
echo $saturday;

?>
4

2 に答える 2

1

土曜日に入ることができるのは、たとえば1月1日で、年に1回だけです。

$firstDate = '01/01/2000';
$endDate = '01/01/2012';

$time1 = strtotime($firstDate);
$time2 = strtotime($endDate);

$saturday = 0;
while ($time1 < $time2) {

    $time1 = strtotime(date("Y-m-d", $time1) . " +1 year");
    $chk = date('D', $time1);
    if ($chk == 'Sat') {
        $saturday++;
    }

}

echo "Saturdays at 01/01/yyyy: " . $saturday . "\n";

私が変更した行は次のとおりです。

$time1 = strtotime(date("Y-m-d", strtotime($time1)) . " +1 year");

$time1 = strtotime(date("Y-m-d", $time1) . " +1 year");

$time1エポックからすでに秒単位であるように-日付に必要な形式。

于 2012-12-25T00:34:39.037 に答える
0

strtotime1970-01-01からの秒数が表示されます。日のみに関心があるため、計算を高速化するために、ループを 1 日あたり 86400 秒ずつ増やすことができます。

for($i = $time1; $i <= $time2; $i += 86400) {
...
}

いくつかのポイントがあります

  • $saturdayあなたのループから抜け出す
  • 大晦日を通年でチェックする
  • $i代わりにループカウンターをチェックしてください$newYearTime

これはうまくいくはずです

$firstDate = '01/01/2000';
$endDate = '01/01/2012';

# convert above string to time
$time1 = strtotime($firstDate);
$time2 = strtotime($endDate);

$saturday = 0;
for($i=$time1; $i<=$time2; $i += 86400){
    $weekday = date('D', $i);
    $dayofyear = date('z', $i);
    if($weekday == 'Sat' && $dayofyear == 0){ 
        $saturday++;    
    } 
}

echo "$saturday\n";
于 2012-12-25T00:24:01.777 に答える