JavaScript 标准内置对象 - Date

三葉Leaves Author

构造函数

Date() 构造函数可以创建一个基于传入参数构建的 Date 实例,或返回代表当前时间的字符串。

无参数

当没有提供参数时,新创建的 Date 对象代表当前的日期和时间。

1
2
3
4
5
const date = new Date()

console.log(date); // 2025-07-25T02:23:42.865Z

console.log(date.getTime()); // 1753410222865

参数为时间戳值 (Timestamp)

时间戳值表示从 1970年1月1日 00:00:00 UTC 到指定时间所经过的毫秒数,打印出来的则是这个“指定时间”

1
2
const specificTime = new Date(1672531200000);
console.log(specificTime); // 2023-01-01T00:00:00.000Z

传入年月日等具体数字

1
2
3
4
// new Date(year, monthIndex, day, hours, minutes, seconds, ms)
const christmas = new Date(2024, 11, 25, 18, 0, 0);

console.log(christmas); // 2024年12月25日 18:00:00

有一个值得注意的点是 monthIndex(月份)是从 0 开始的!

传入一个日期字符串

由于取决于具体实现,这种方式不推荐在生产环境中使用

1
2
3
4
5
// 尽量使用 ISO 8601 格式 (YYYY-MM-DDTHH:mm:ss.sssZ) 来提高兼容性
const isoDate = new Date('2024-01-01T00:00:00');
console.log(isoDate);

// 像 '2024/01/01' 这种格式在某些环境下可能会解析失败或出错

静态方法

不同于对象的实例方法,静态方法可以在不创建实例的时候直接调用,其一般用作与实例无关的方法。

MDN 上给出的静态方法就三个,我下面只介绍第一个。

  1. Date.now()
  2. Date.parse()
  3. Date.UTC()

Date.now() 方法返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间的毫秒数。

如果你新建一个对象并且不传参,获取的也是当前时间,用时间戳表示的话两者看起来就几乎一样了:

1
2
3
4
5
6
7
8
9
const date = new Date()

console.log(date); // 2025-07-25T02:23:42.865Z

// 获取时间戳的实例方法,下面会讲到
console.log(date.getTime()); // 1753410222865

// 静态方法,不依赖于实例而直接调用
console.log(Date.now()); // 1753410222871

之所以末尾的数字还有一点不一样,我猜测是因为执行两条语句的时间差相差几毫秒。

实例方法

  1. Date.prototype.getDate()
  2. Date.prototype.getDay()
  3. Date.prototype.getFullYear()
  4. Date.prototype.getHours()
  5. Date.prototype.getMilliseconds()
  6. Date.prototype.getMinutes()
  7. Date.prototype.getMonth()
  8. Date.prototype.getSeconds()
  9. Date.prototype.getTime()
  10. Date.prototype.setDate()
  11. Date.prototype.setFullYear()
  12. Date.prototype.setHours()
  13. Date.prototype.setMilliseconds()
  14. Date.prototype.setMinutes()
  15. Date.prototype.setMonth()
  16. Date.prototype.setSeconds()
  17. Date.prototype.setTime()
  18. 还有很多…

提供的实例方法太丰富了,下面几个 get 方法会尤其常用,其能精准的获取到当前的秒数、分钟数等,这就很实用了:

1
2
3
4
5
6
7
8
9
10
11
12
const d = new Date('2024-05-20T13:14:00');

d.getFullYear(); // 2024 (获取四位数年份)
d.getMonth(); // 4 (记住!返回的是 0-11,所以 4 代表 5月)
d.getDate(); // 20 (获取月份中的第几天,1-31)
d.getDay(); // 1 (获取星期几,0代表周日, 1代表周一, ... 6代表周六)
d.getHours(); // 13 (获取小时, 0-23)
d.getMinutes(); // 14 (获取分钟, 0-59)
d.getSeconds(); // 0 (获取秒数, 0-59)

// 还有一个超级重要的方法!
d.getTime(); // 1716182040000 (获取时间戳,毫秒数!)

还有三种实例方法,这在输出给用户看的时间信息时会很有用:

1
2
3
4
const date = new Date()
console.log(date.toLocaleString()); // 2025/7/25 10:23:42
console.log(date.toLocaleDateString()); // 2025/7/25
console.log(date.toLocaleTimeString()); // 10:23:42

常见实践

计算时间差

要表示成人能看懂的样子,还得进行一次除法的转换

1
2
3
4
5
6
7
const startTime = new Date('2024-05-20 09:00:00');
const endTime = new Date('2024-05-20 18:30:00');

const durationInMs = endTime.getTime() - startTime.getTime(); // 毫秒差

const durationInHours = durationInMs / (1000 * 60 * 60); // 转换为小时
console.log(`工作时长为 ${durationInHours.toFixed(1)} 小时`); // 9.5 小时
  • 标题: JavaScript 标准内置对象 - Date
  • 作者: 三葉Leaves
  • 创建于 : 2025-07-25 00:00:00
  • 更新于 : 2025-08-15 12:09:51
  • 链接: https://blog.oksanye.com/e2e813972ea7/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
来发评论吧~
Powered by Waline v3.2.2