JavaScript getDay() 方法(手把手讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
- 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言
在 JavaScript 开发中,日期与时间的操作是常见的需求场景。无论是显示当前日期、计算时间节点,还是根据日期逻辑执行特定任务,开发者都需要掌握相关的 API 方法。在众多日期操作方法中,getDay()
方法因其简洁性和实用性,成为处理星期相关问题的核心工具。本文将从基础概念、使用技巧到进阶案例,深入解析 JavaScript getDay() 方法
的工作原理与应用场景,帮助开发者高效解决实际问题。
JavaScript getDay()
方法的基础用法
什么是 getDay()
方法?
getDay()
是 JavaScript 中 Date
对象的内置方法,用于获取指定日期对应的星期几。它的返回值是一个 0 到 6 的整数,其中:
0
表示星期日1
表示星期一...
6
表示星期六
核心特性:
- 返回值严格基于国际标准(ISO 8601),以星期日为一周的起始日。
- 必须作用于有效的
Date
对象,否则会抛出错误。
简单示例:获取当前星期几
以下代码演示了如何通过 getDay()
获取当前日期的星期值,并将其转换为中文显示:
// 创建当前日期对象
const today = new Date();
// 获取星期值(0-6)
const dayNumber = today.getDay();
// 映射星期数字到中文名称
const days = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
const dayName = days[dayNumber];
console.log(`今天是 ${dayName}`); // 输出示例:今天是 星期二
关键点:
- 依赖
Date
对象:getDay()
必须调用自Date
实例,否则会报错。 - 返回值范围固定:永远返回
0-6
的整数,无需额外验证数值范围。
常见误区与注意事项
误区 1:混淆 getDay()
与其他日期方法
开发者常因方法名称相似而混淆 getDay()
与其他 Date
方法:
getDate()
:返回一个月中的具体日期(1-31)。getHours()
:返回当前小时数(0-23)。getDay()
:仅关注星期几的数字表示。
比喻:
可以将 getDay()
想象为日历上的“星期标签”,而 getDate()
是日历上的具体日期数字,两者功能互补但逻辑独立。
误区 2:忽略返回值的星期起始日
由于 getDay()
以星期日为第 0 天,开发者可能因文化差异(如部分国家以星期一为工作周的起始)而产生误解。例如:
const date = new Date("2023-10-01"); // 2023年10月1日是星期日
console.log(date.getDay()); // 输出 0(符合 ISO 标准)
若需适配其他地区的起始日,可通过数学运算调整返回值:
// 将星期日(0)转换为星期一(0),原星期一(1)变为 1...
const adjustedDay = (dayNumber + 6) % 7;
误区 3:未验证输入的日期对象
若调用 getDay()
的对象不是合法的 Date
实例,会导致运行时错误。例如:
const invalidDate = "2023-10-01"; // 字符串而非 Date 对象
console.log(invalidDate.getDay()); // 报错:invalidDate.getDay is not a function
解决方案:
在调用前始终使用 Date
构造函数包装输入值:
const input = "2023-10-01";
const date = new Date(input); // 确保对象类型正确
进阶用法:结合 getDay()
实现复杂逻辑
案例 1:判断是否为周末
通过 getDay()
的返回值,可以快速判断某天是否为周末:
function isWeekend(date) {
const day = date.getDay();
return day === 0 || day === 6; // 星期日或星期六
}
// 测试
const today = new Date();
console.log(`今天是否周末? ${isWeekend(today)}`); // 根据实际日期输出 true/false
案例 2:根据星期设置不同样式
在网页开发中,常需根据星期动态调整元素样式。例如,用红色高亮周末:
function highlightWeekend(date) {
const day = date.getDay();
const className = day === 0 || day === 6 ? "weekend" : "weekday";
document.getElementById("date-display").className = className;
}
// HTML 中需预先定义 .weekend 和 .weekday 样式
案例 3:计算指定天数后的星期
结合 Date
对象的时间戳操作,可实现“N 天后是星期几”的计算:
function getDayAfterNDays(daysToAdd) {
const currentDate = new Date();
const futureDate = new Date(currentDate.getTime() + daysToAdd * 24 * 60 * 60 * 1000);
return futureDate.getDay();
}
// 示例:3 天后是星期几?
console.log(getDayAfterNDays(3)); // 输出对应数字
与 toLocaleDateString()
等方法的协同使用
getDay()
通常与其他日期方法或本地化 API 结合,以满足多样化需求:
示例:显示完整日期与星期
const date = new Date();
const dayName = ["日", "一", "二", "三", "四", "五", "六"][date.getDay()];
// 使用 toLocaleDateString() 获取本地化日期格式
const formattedDate = date.toLocaleDateString("zh-CN") + `(星期${dayName})`;
console.log(formattedDate); // 输出示例:2023/10/1(星期日)
示例:国际化星期名称
通过 Intl.DateTimeFormat
获取多语言支持:
function getLocalizedWeekday(date, locale = "zh-CN") {
const options = { weekday: "long" };
return new Intl.DateTimeFormat(locale, options).format(date);
}
const date = new Date();
console.log(getLocalizedWeekday(date)); // 中文输出:星期日
最佳实践与性能优化
1. 预先缓存星期名称数组
若需频繁转换星期数字到名称,建议将映射数组定义为常量,避免重复计算:
const WEEKDAY_NAMES = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
function getWeekdayName(date) {
return WEEKDAY_NAMES[date.getDay()];
}
2. 避免直接依赖 Date
对象的默认时区
由于 JavaScript 的 Date
对象基于浏览器时区,若需跨时区计算,应显式指定时间戳或使用库(如 moment.js
或 date-fns
):
// 明确传入 UTC 时间
const utcDate = new Date(Date.UTC(2023, 9, 1)); // 10月1日的 UTC 时间
3. 错误处理与类型检查
在处理用户输入或外部数据时,添加类型校验逻辑:
function safeGetDay(input) {
const date = new Date(input);
if (isNaN(date.getTime())) {
throw new Error("无效的日期格式");
}
return date.getDay();
}
结论
JavaScript getDay() 方法
是开发者处理星期相关逻辑的高效工具,其简洁的语法和标准化的返回值设计,使得日期操作代码易于阅读与维护。通过掌握其基础用法、规避常见误区,并结合其他 API 实现复杂场景,开发者可以快速构建出日历、排班系统、事件提醒等应用。
本文的示例代码与案例已覆盖从简单到复杂的应用场景,建议读者通过实践加深理解。例如,尝试编写一个“倒计时至下一个工作日”的脚本,或根据用户输入的日期生成带星期标注的日历表格。通过不断练习,开发者将能更灵活地运用 getDay()
方法,提升 JavaScript 日期操作的开发效率。