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}`); // 输出示例:今天是 星期二

关键点

  1. 依赖 Date 对象getDay() 必须调用自 Date 实例,否则会报错。
  2. 返回值范围固定:永远返回 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.jsdate-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 日期操作的开发效率。

最新发布