JavaScript 中日期与时间处理:Node.js 完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程
```html

在 JavaScript (Node.js) 中处理日期和时间:从基础到高级技术



处理日期和时间是 Web 开发中最常见的任务之一。无论是事件日志记录、用户数据处理、任务调度还是时间戳显示,都离不开在 JavaScript 中管理日期的能力。在本文中,我们将探讨在 Node.js 环境中处理日期的所有关键方面:从创建和格式化到时区的复杂操作以及流行库的使用。



基础:JavaScript 中的 Date 对象



内置的 Date 对象是处理日期的基础。它存储自 1970 年 1 月 1 日(Unix 纪元)以来经过的毫秒数。



创建日期



有几种方法可以创建 Date 实例:



// 当前日期和时间const now = new Date();console.log(now); // 2025-03-15T10:30:00.000Z

// 从毫秒数创建(Unix 时间戳)const fromTimestamp = new Date(1742025000000);console.log(fromTimestamp); // 2025-03-15T10:30:00.000Z

// 从字符串创建(ISO 8601)const fromString = new Date('2025-03-15T10:30:00');console.log(fromString);

// 从组件创建(年、月、日、时、分、秒、毫秒)const fromComponents = new Date(2025, 2, 15, 10, 30, 0, 0); // 月份:0-11console.log(fromComponents); // March 15, 2025 10:30:00


重要提示:JavaScript 中的月份从 0 开始编号(一月为 0,十二月为 11)。



获取日期组件



用于提取日期各个部分的方法:



const date = new Date('2025-03-15T10:30:45.123Z');

console.log(date.getFullYear()); // 2025console.log(date.getMonth()); // 2(三月)console.log(date.getDate()); // 15console.log(date.getDay()); // 6(星期六,0 为星期日)console.log(date.getHours()); // 10console.log(date.getMinutes()); // 30console.log(date.getSeconds()); // 45console.log(date.getMilliseconds());// 123console.log(date.getTime()); // 自纪元以来的毫秒数


在 Node.js 中格式化日期



标准的 Date 对象提供的格式化功能有限。要以可读格式输出,请使用 toLocaleDateString() 和 toLocaleString()。



const date = new Date('2025-03-15T10:30:00');

// 本地化格式化console.log(date.toLocaleDateString('ru-RU')); // 15.03.2025console.log(date.toLocaleTimeString('ru-RU')); // 10:30:00console.log(date.toLocaleString('ru-RU')); // 15.03.2025, 10:30:00

// 带选项const options = { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', hour: '2-digit', minute: '2-digit'};console.log(date.toLocaleString('ru-RU', options)); // суббота, 15 марта 2025 г., 10:30


自定义格式化



为了完全控制,编写一个简单的函数:



function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {  const map = {    YYYY: date.getFullYear(),    MM: String(date.getMonth() + 1).padStart(2, '0'),    DD: String(date.getDate()).padStart(2, '0'),    HH: String(date.getHours()).padStart(2, '0'),    mm: String(date.getMinutes()).padStart(2, '0'),    ss: String(date.getSeconds()).padStart(2, '0'),  };  return format.replace(/YYYY|MM|DD|HH|mm|ss/g, match => map[match]);}

console.log(formatDate(new Date(), 'DD.MM.YYYY')); // 15.03.2025console.log(formatDate(new Date(), 'HH:mm:ss')); // 10:30:00


日期操作:添加、减去、比较



可以通过 set* 方法直接修改日期,或者通过操作毫秒数来修改。



添加和减去时间



const date = new Date('2025-03-15T10:30:00');

// 添加 5 天date.setDate(date.getDate() + 5);console.log(date); // 2025-03-20T10:30:00

// 添加 ```

博客

书籍推荐