You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:25:12