核心思路是将当前日期和目标日期统一格式化为“yyyy-mm-dd”字符串再比较,避免时区与精度问题;多日期区间则用规则数组遍历判断,确保start/end均为合法iso格式字符串。

用 JavaScript 获取当前日期并比对目标日期
核心思路是用 new Date() 获取浏览器本地时间,提取年月日,再和预设的“生效日期”做字符串或数值比对。注意别直接比对 Date 对象——时区、毫秒精度、是否含时分秒都会导致意外不匹配。
推荐做法是统一转成 YYYY-MM-DD 格式字符串比较:
const today = new Date();
const yyyy = today.getFullYear();
const mm = String(today.getMonth() + 1).padStart(2, '0');
const dd = String(today.getDate()).padStart(2, '0');
const todayStr = `${yyyy}-${mm}-${dd}`; // 如 "2024-06-15"
if (todayStr === "2024-06-15") {
document.body.style.background = "linear-gradient(135deg, #ff9a9e, #fad0c4)";
}
多个日期区间或单日切换背景的写法
如果不止一个日期,比如“6月15日到6月20日”用节日红,“7月1日”用国旗红,硬编码 if/else 容易混乱。建议把规则提前定义为数组,遍历判断:
- 每条规则含
start、end(可选)、background字段 -
start和end都用YYYY-MM-DD字符串,避免Date构造失败(如"2024-06-15"合法,"2024/06/15"在部分浏览器可能解析出错) - 判断逻辑用
todayStr >= rule.start && todayStr
页面加载后立即生效,且支持后续日期变化(如跨天)
仅在页面加载时执行一次不够——用户可能凌晨打开网页,停留到次日,背景不该卡在昨天的样式上。需要结合定时检查:
- 首次执行用
DOMContentLoaded或直接放<script></script>底部 - 后续每分钟检查一次:用
setInterval(checkBackground, 60 * 1000) - 注意避免重复添加样式:先清除旧的
style.background或用 CSS class 切换更稳妥 - 若用 class,可预先在
<style></style>中定义好.bg-june15 { background: ... },JS 只负责document.body.className = "bg-june15"
时区问题和服务器时间不可靠的现实约束
浏览器的 new Date() 拿的是用户本地系统时间,不是服务器时间。这意味着:
- 用户手动改了系统时间,背景就会错乱(比如把电脑时间调到明年,立刻看到新年背景)
- 跨国用户看到的“同一天”实际对应不同时段(东京 6 月 15 日 00:00 时,洛杉矶还是 6 月 14 日 08:00)
- 无法通过前端代码获取真实服务器时间——HTTP 响应头里的
Date字段精度低、易被代理篡改,且没提供时区偏移
真正需要严格按 UTC 时间触发的场景,必须由后端渲染初始 HTML 或提供带时间戳的 API 接口,前端只做兜底展示。
多数运营活动用本地日期已够用,但得在需求文档里明确写清:“以用户设备时间为准”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











