JavaScript中Date对象用法详解
在 JavaScript 中,Date
对象用于处理日期和时间。以下是其核心用法详解:
一、创建 Date 对象
方式 | 示例 | 说明 |
---|---|---|
当前时间 | new Date() | 返回当前日期和时间(本地时区) |
时间戳 | new Date(timestamp) | 参数为毫秒数(自 1970-01-01 00:00:00 UTC 起) |
日期字符串 | new Date("2024-06-15T13:45:30") | 支持 ISO 8601 格式(推荐)或其他可解析格式(如 "June 15, 2024" ) |
年月日时分秒 | new Date(2024, 5, 15, 13, 45, 30) | 注意:月份从 0 开始(0=1月),参数范围:年, 月, 日, 时, 分, 秒, 毫秒 |
二、常用方法
1. 获取时间分量(本地时区)
javascript
复制
下载
const date = new Date(); date.getFullYear(); // 年份(4位数) date.getMonth(); // 月份(0-11,0=1月) date.getDate(); // 日期(1-31) date.getHours(); // 小时(0-23) date.getMinutes(); // 分钟(0-59) date.getSeconds(); // 秒(0-59) date.getMilliseconds(); // 毫秒(0-999) date.getDay(); // 星期几(0-6,0=周日)
2. 获取时间分量(UTC 时区)
javascript
复制
下载
date.getUTCFullYear(); // UTC 年份 date.getUTCMonth(); // UTC 月份(0-11) // 其他方法类似,如 getUTCHours() 等
3. 设置时间分量
javascript
复制
下载
date.setFullYear(2025); // 设置年份 date.setMonth(11); // 设置月份(11=12月) // 其他方法类似,如 setHours(23) 等
4. 时间戳与转换
javascript
复制
下载
date.getTime(); // 返回时间戳(毫秒) date.valueOf(); // 同上(常用于比较) Date.now(); // 当前时间戳(静态方法)
5. 格式化输出
javascript
复制
下载
date.toString(); // 完整日期时间字符串(本地时区) date.toISOString(); // ISO 8601 格式(UTC 时区,如 "2024-06-15T05:45:30.000Z") date.toLocaleString(); // 本地化格式(可配置语言和选项) date.toDateString(); // 日期部分(如 "Sat Jun 15 2024")
三、关键注意事项
-
月份从 0 开始
0
表示一月,11
表示十二月。 -
时区差异
new Date()
和get*()
方法默认使用本地时区,toISOString()
和getUTC*()
使用 UTC。 -
日期解析风险
避免使用new Date("非标准字符串")
(如"2024-06-15"
在某些旧浏览器中被视为 UTC 而非本地时间)。推荐:javascript
复制
下载
// 安全解析 ISO 格式或使用具体参数 new Date("2024-06-15T00:00:00"); // 明确指定时间部分
-
比较日期
使用时间戳比较更可靠:javascript
复制
下载
const date1 = new Date(2024, 5, 15); const date2 = new Date(2024, 5, 20); if (date1.getTime() < date2.getTime()) { ... }
四、实用示例
1. 计算日期差(天)
javascript
复制
下载
const start = new Date(2024, 5, 15); const end = new Date(2024, 5, 20); const diffDays = Math.floor((end - start) / (1000 * 60 * 60 * 24)); // 5
2. 格式化日期
javascript
复制
下载
function formatDate(date) {return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`; } formatDate(new Date()); // "2024-06-15"
3. 验证日期有效性
javascript
复制
下载
function isValidDate(date) {return date instanceof Date && !isNaN(date); } isValidDate(new Date("invalid")); // false
五、常见问题
Q:为什么 new Date(2024, 0, 32)
返回 2 月 1 日?
A:日期自动溢出(1 月 32 日 = 2 月 1 日)。
Q:如何获取 UTC 时间戳?
A:使用 date.getTime()
或 Date.UTC()
:
javascript
复制
下载
const utcTimestamp = Date.UTC(2024, 5, 15); // 返回 UTC 时间戳
掌握这些核心用法后,可高效处理 JavaScript 中的日期与时间操作!
在 JavaScript 中,直接调用 Date('2025-06-08')
(没有使用 new
关键字)会返回一个表示当前日期和时间的字符串,而不会解析传入的参数!这是常见误区。
具体行为:
javascript
复制
下载
const result = Date('2025-06-08'); console.log(result); // 输出类似:"Mon Jun 15 2025 14:30:25 GMT+0800 (中国标准时间)" // ⚠️ 注意:结果是执行代码时的当前时间,不是 2025-06-08!
关键区别:
调用方式 | 返回值类型 | 是否解析参数 | 实际效果 |
---|---|---|---|
Date('2025-06-08') | string | ❌ 否 | 返回当前时间的字符串表示 |
new Date('2025-06-08') | Date对象 | ✅ 是 | 解析参数为指定日期 |
正确用法:
javascript
复制
下载
// ✅ 正确:使用 new 创建 Date 对象 const dateObj = new Date('2025-06-08'); console.log(dateObj); // 2025-06-08T00:00:00.000Z (UTC时间)// ✅ 获取本地时间字符串 console.log(dateObj.toLocaleString()); // "2025/6/8 08:00:00" (北京时间,UTC+8)
重要细节:
-
时区陷阱:
javascript
复制
下载
new Date('2025-06-08').toISOString() // "2025-06-08T00:00:00.000Z" (UTC)
-
ISO 字符串末尾的
Z
表示 UTC 时间 -
在中国时区 (UTC+8),这相当于本地时间 2025-06-08 08:00:00
-
-
安全解析建议:
javascript
复制
下载
// 避免跨浏览器差异,推荐显式指定时间 new Date('2025-06-08T00:00:00+08:00') // 明确北京时间
总结:
-
Date()
函数调用 → 返回当前时间字符串(忽略参数) -
new Date()
构造函数 → 创建日期对象(解析参数)
要正确解析日期字符串,必须使用 new Date()
!
在 JavaScript 中,给日期增加天数可以通过 Date
对象的 setDate()
方法实现。以下是几种实现方式:
方法 1:使用 setDate()
(推荐)
javascript
复制
下载
// 创建日期对象 const date = new Date('2025-06-08');// 天数加 1 date.setDate(date.getDate() + 1);console.log(date.toISOString().split('T')[0]); // "2025-06-09"
方法 2:使用时间戳(毫秒数)
javascript
复制
下载
const date = new Date('2025-06-08'); const newDate = new Date(date.getTime() + 24 * 60 * 60 * 1000); // 添加 1 天的毫秒数console.log(newDate.toISOString().split('T')[0]); // "2025-06-09"
方法 3:创建工具函数
javascript
复制
下载
function addDays(date, days) {const result = new Date(date);result.setDate(result.getDate() + days);return result; }// 使用示例 const date = new Date('2025-06-08'); const newDate = addDays(date, 1); // 加 1 天 console.log(newDate.toISOString().split('T')[0]); // "2025-06-09"
重要注意事项:
-
自动处理跨月/跨年:
javascript
复制
下载
const date = new Date('2025-06-30'); date.setDate(date.getDate() + 2); console.log(date.toISOString().split('T')[0]); // "2025-07-02"
-
时区问题:
-
new Date('2025-06-08')
会被解析为 UTC 时间 -
在中国时区 (UTC+8) 会显示为 6 月 8 日 08:00
-
加 1 天后,在 UTC 时间会变成 6 月 9 日 00:00
-
-
避免修改原对象:
javascript
复制
下载
// 正确做法:创建新对象 function safeAddDays(date, days) {const newDate = new Date(date); // 复制原对象newDate.setDate(newDate.getDate() + days);return newDate; }
格式化输出:
javascript
复制
下载
function formatDate(date) {return [date.getFullYear(),String(date.getMonth() + 1).padStart(2, '0'),String(date.getDate()).padStart(2, '0')].join('-'); }const newDate = addDays(new Date('2025-06-08'), 1); console.log(formatDate(newDate)); // "2025-06-09"
处理月末日期示例:
javascript
复制
下载
// 处理 2025 年 1 月 31 日加 1 天 const date = new Date(2025, 0, 31); // 2025-01-31 date.setDate(date.getDate() + 1); console.log(formatDate(date)); // "2025-02-01"
总结:推荐使用 setDate()
方法,因为它会自动处理月份和年份的变化,是最简单可靠的方式。使用 setDate(date.getDate() + N)
可以轻松加减任意天数。