PHP日历开发:如何将当日日期设为浅红色,其余日期设为绿色?
问题分析与解决方案
你的代码核心问题在于只对比了日期的“日”部分,没有考虑完整的年、月、日,导致只要日数字大于等于今天的日就会变红,完全不符合“仅当日日期显示浅红”的需求。另外还有几个小细节需要调整,比如浅红色的取值、代码逻辑的冗余。
修正后的代码
<table border="1"> <?php date_default_timezone_set('Europe/Stockholm'); echo "<tr>"; $week_number = 21; $year = 2018; // 统一周数格式,小于10补0 $week_number = sprintf("%02d", $week_number); // 获取今天的完整日期(年-月-日),用于准确对比 $today_full = date('Y-m-d'); for($day=1; $day<=7; $day++) { // 获取该周第day天的完整日期(Y-m-d)和日数字 $current_date = date('Y-m-d', strtotime($year . "W" . $week_number . $day)); $day_number = date('d', strtotime($current_date)); // 判断是否是今天,设置对应的背景色 if ($current_date === $today_full) { // 浅红色背景 echo "<td bgcolor='#ffcccc'>$day_number</td>"; } else { // 绿色背景 echo "<td bgcolor='green'>$day_number</td>"; } } ?> </table>
关键修改点
- 完整日期对比:改用
Y-m-d格式的完整日期来判断是否是当日,避免了仅对比日数字的错误逻辑(比如跨月、跨年的情况)。 - 简化周数补0:用
sprintf("%02d", $week_number)替代原来的if判断,代码更简洁。 - 浅红色取值:把纯红色
red改成浅红色#ffcccc,符合你的需求。 - 移除冗余逻辑:删掉了原来多余的嵌套else判断,逻辑更清晰。
额外说明
如果你的日历需要适配动态的年份和周数(而不是固定2018年第21周),可以把$year和$week_number改成动态获取的,比如:
$year = date('Y'); $week_number = date('W');
内容的提问来源于stack exchange,提问作者calle.fr
相关产品推荐
相关产品推荐

