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

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

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

开始课程

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



处理日期和时间是后端开发中最常见的任务之一。无论是事件日志记录、期限计算、报告生成还是 API 交互,正确掌握时间戳处理都是一项至关重要的技能。在本文中,我们将全面解析在 Node.js 环境中处理日期的所有关键方面:从内置的 Date 对象到能够简化开发者工作的流行库。



1. 内置 Date 对象:基础与陷阱



在 JavaScript 中,处理日期由内置的 Date 对象负责。它提供了创建、读取和操作日期的基础方法。然而,它有一些需要了解的重要特性。



创建 Date 对象

获取当前日期和时间的最简单方法:

const now = new Date();console.log(now); // 2025-03-20T14:30:00.000Z (示例)


可以通过字符串、timestamp(自 1970 年 1 月 1 日以来的毫秒数)或手动指定组件来创建日期:

// 从字符串 (ISO 8601)const dateFromString = new Date("2025-12-25T10:00:00Z");

// 从 timestampconst dateFromTimestamp = new Date(1735048800000);

// 从组件 (年, 月 (0-11), 日, 时, 分, 秒, 毫秒)const dateFromParts = new Date(2025, 11, 25, 10, 0, 0, 0); // 2025年12月25日 10:00:00console.log(dateFromParts); // 2025-12-25T07:00:00.000Z (取决于时区)


重要提示: JavaScript 中的月份从 0 开始编号(一月为 0,十二月为 11)。这是常见的错误原因。



获取日期组件

Date 对象提供了获取各个组件的方法:

const date = new Date();console.log(date.getFullYear());    // 2025console.log(date.getMonth());       // 2 (三月,因为从0开始计数)console.log(date.getDate());        // 20console.log(date.getDay());         // 4 (星期四,0 为星期日)console.log(date.getHours());       // 17console.log(date.getMinutes());     // 45console.log(date.getSeconds());     // 12console.log(date.getMilliseconds());// 345console.log(date.getTime());        // 1742474712345 (timestamp)


请注意:所有这些方法返回的值都基于服务器的本地时区。要使用 UTC,请使用带有 getUTC... 前缀的方法(例如 getUTCFullYear())。



日期操作

通过 set 方法修改日期。它们会改变原始对象:

const date = new Date();date.setFullYear(2026);date.setMonth(0); // 一月date.setDate(15);console.log(date); // 2026-01-15T... (其他组件保持不变)


陷阱: set 方法会自动调整日期。例如,如果设置为 1 月 32 日,日期将变为 2 月 1 日。这可能既方便又出乎意料。



2. 日期格式化与所需格式输出



内置方法 toLocaleDateString() 允许以特定区域设置的格式输出日期:

const date = new Date(2025, 11, 25);console.log(date.toLocaleDateString('ru-RU')); // 25.12.2025console.log(date.toLocaleDateString('en-US')); // 12/25/2025console.log(date.toLocaleDateString('de-DE')); // 25.12.2025


对于更灵活的格式化,可以使用 Intl.DateTimeFormat:

const formatter = new Intl.DateTimeFormat('ru-RU', {  year: 'numeric',  month: 'long',  day: 'numeric',  weekday: 'long',  hour: '2-digit',  minute: '2-digit'});console.log(formatter.format(new Date())); // "четверг, 20 марта 2025 г., 17:45"


然而,对于复杂格式(例如 "2025-03-20T14:30:00+03:00")或自定义模板,最好使用库(下文将介绍)。



博客

书籍推荐