PHP中如何从当前周开始生成全年剩余周的MySQL INSERT语句
解决方案:从当前周开始生成INSERT语句
没问题,我来帮你调整代码,让它从当前周(第13周)开始生成到当年最后一周的INSERT语句。核心思路是把循环的起始时间从当年第一周的周一,改成当前周的周一,同时修正你代码里的一个小语法错误。
修改后的完整代码
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; $year = $currentyear; // 关键修改:获取当前周的周一作为循环起始点 $currentWeekMonday = strtotime('monday this week', strtotime($ddate)); $nextSunday = $currentWeekMonday; // 沿用你原来的变量名保持逻辑连贯 while (date('Y', $nextSunday) == $year) { // 修正语法错误:调整$year的单引号位置,同时准确获取当前循环对应的周数 $insertWeek = date('W', $nextSunday); $insert = "INSERT INTO history (`WEEK`, `YEAR`, `ADDDATE`, `USERNAME`) VALUES ($insertWeek, '$year', NOW(), 'jbeasley')"; echo $insert, NL; $nextSunday = strtotime('+1 week', $nextSunday); }
关键修改说明
- 调整循环起始点:
原来的代码从当年1月1日的周一启动循环,现在我们用strtotime('monday this week', strtotime($ddate))直接定位到当前日期所在周的周一,确保循环从当前周开始。 - 修正语法错误:
你原代码的INSERT语句里$year'多了一个单引号,改成'$year'才能避免SQL语法报错。 - 精准获取周数:
新增$insertWeek = date('W', $nextSunday),确保每次循环都能正确拿到当前时间对应的周数,避免因时间计算逻辑导致的周数偏差。
预期输出
运行后会生成从第13周开始到2021年最后一周的INSERT语句,和你期望的格式完全一致:
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 (52, '2021', NOW(), 'jbeasley')
内容的提问来源于stack exchange,提问作者John Beasley
相关产品推荐
相关产品推荐

