【发布时间】:2021-06-26 15:31:21
【问题描述】:
我正在尝试在今年剩余时间插入相同的记录。
由于我们目前处于 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
【问题讨论】:
-
您已经知道如何获得一周:
$week = $date->format("W");。您可以在循环中添加一个简单的if条件,如果一周小于您想要的,则跳过插入。 -
这似乎是一个徒劳的练习。你为什么想做这个?通常,“历史”是过去,而不是未来。为什么不只创建具有实际意义的数据?
-
@KIKOSoftware - “历史”只是表的名称。从技术上讲,它不是存储历史记录。
-
语义在开发中也很重要。将不包含历史记录的表命名为
history只会给系统增加混乱。 -
@El_Vanja - 明白了。我会记住这一点。我还在测试你的建议。很快就会恢复。
标签: php mysql while-loop insert