从本周开始插入今年剩余时间的记录

Insert records for the rest of the year starting on current week

我正在尝试为今年剩余时间插入相同的记录。

由于我们目前处于 2021 年的第 13 周,因此总共剩余 40 周(包括第 13 周)。

使用下面的代码,我可以获得当前的年份和星期:

define('NL', "\n");

$ddate = date("Y/m/d");
$date = new DateTime($ddate);
$currentyear = $date->format("Y");
$week = $date->format("W");

echo "Current Year: $currentyear", NL;
echo "Weeknumber: $week", NL;

以上将输出以下内容:

Current Year: 2021
Weeknumber: 13

这是我尝试使用 WHILE 循环创建具有不同周数的 INSERT 查询:

$year  = $currentyear;

$firstDayOfYear = mktime(0, 0, 0, 1, 1, $year);
$nextSunday     = strtotime('monday', $firstDayOfYear);

while (date('Y', $nextSunday) == $year) {
  $insert = "INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES ($nextSunday, $year', NOW(), 'jbeasley')";
  
  echo $insert, NL;

  $nextSunday = strtotime('+1 week', $nextSunday);
}

输出结果如下:

 INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES (1, '2021', NOW(), 'jbeasley')
 INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES (2, '2021', NOW(), 'jbeasley')
 INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES (3, '2021', NOW(), 'jbeasley')
 // and so on up to 52 (there are 52 weeks in 2021)

这在很大程度上是有效的,但它也是我卡住的地方。

我不确定如何让 INSERT 在本周开始,而不考虑之前的所有周。在这种情况下,由于我们目前处于第 13 周,因此第一个 INSERT 应该从第 13 周开始,然后是剩余的几周,如下所示:

INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES (13, '2021', NOW(), 'jbeasley')
INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES (14, '2021', NOW(), 'jbeasley')
INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES (15, '2021', NOW(), 'jbeasley')
// and so on until the final week

使用 El_Vanja 的建议,我更新了 WHILE 循环以包含 IF/ELSE 以检查当前周是否大于 :

while (date('Y', $nextSunday) == $year) {
  if($week > date('W', $nextSunday)){
    echo "skip this week " . date('W', $nextSunday), NL;
    $nextSunday = strtotime('+1 week', $nextSunday);
  }
  else{
    $insert = "INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES ($nextSunday, $year, NOW(), 'jbeasley')";

    echo $insert, NL;

    echo date('W', $nextSunday), NL;
    $nextSunday = strtotime('+1 week', $nextSunday);
  }
}

使用上面的方法,循环将跳过过去几周,只在本周开始创建查询。