PHP周历开发问题:如何将空白日期输出为
解决周历中非目标月份日期替换为 的问题
我来帮你搞定这个需求!你想要的是在基于周的日历里,把不属于目标月份的日期替换成空白占位符 ,对吧?咱们直接修改你的代码,加上月份判断逻辑就行。
单个周的处理方案
比如你提到的2018年第18周,目标月份是5月(因为这一周的第一天在4月),可以用这段代码:
$week_number = 18; $year = 2018; $target_month = 5; // 你要展示的目标月份(数字1-12) // 确保周号是两位格式,符合strtotime的ISO周要求 if ($week_number < 10) { $week_number = "0" . $week_number; } for ($day = 1; $day <= 7; $day++) { $timestamp = strtotime($year . "W" . $week_number . $day); // 获取当前日期的月份(1-12,不带前导零) $current_month = date('n', $timestamp); if ($current_month != $target_month) { // 不属于目标月份,输出空白占位符 echo " \n"; } else { // 属于目标月份,输出日期 echo date('d', $timestamp) . "\n"; } }
代码说明
- 用
date('n', $timestamp)获取日期的月份(数字格式1-12),和你设定的$target_month对比; - 如果月份不匹配,就输出
,否则输出日期的日部分; - 保留了你原来的周号补零逻辑,确保
strtotime能正确解析ISO周格式。
整月周历的处理方案
如果你要生成整个月份的周历(比如6月,开头有4个来自5月的日期需要替换),可以用这段代码自动遍历该月份的所有周:
$year = 2018; $target_month = 6; // 目标月份:6月 // 获取目标月份第一天的时间戳 $first_day_of_month = strtotime("$year-$target_month-01"); // 获取该月份第一天所属的周号 $first_week = date('W', $first_day_of_month); // 获取目标月份最后一天的时间戳 $last_day_of_month = strtotime(date('Y-m-t', $first_day_of_month)); // 获取该月份最后一天所属的周号 $last_week = date('W', $last_day_of_month); // 遍历该月份的每一周 for ($week = $first_week; $week <= $last_week; $week++) { $week_str = $week < 10 ? "0$week" : (string)$week; echo "<div class='week-row'>"; // 可以加个容器样式 // 遍历一周的7天 for ($day = 1; $day <= 7; $day++) { $timestamp = strtotime("$year-W$week_str-$day"); $current_month = date('n', $timestamp); if ($current_month != $target_month) { echo " "; } else { echo date('d', $timestamp) . " "; } } echo "</div>\n"; }
这段代码会自动生成6月的所有周,开头的4个5月日期会被替换成 ,完美符合你的需求。
内容的提问来源于stack exchange,提问作者calle.fr
相关产品推荐
相关产品推荐

