JavaScript怎么获取当前日期和时间

作者:资源驿站时间:2026-10-30 18:46:08浏览:235

全面讲解在JavaScript中获取当前日期和时间的实用方法,涵盖new Date()基本调用、各时间分量解析、易混淆方法辨析、标准补零格式化、Intl本地化输出与时间戳获取。

在 JavaScript 中获取当前日期和时间的核心入口是内置的 Date 对象。只要执行 new Date(),即可根据运行环境的系统时钟创建一个包含当前年、月、日、时、分、秒以及毫秒的时间实例。本文将直接从这一基础操作出发,详细拆解各个时间分量的获取方法、日常开发中最容易踩坑的月份与星期索引问题,并演示如何输出规范的自定义时间格式与现代本地化时间字符串。

一、核心入口:通过 new Date() 获取时间对象

JavaScript 没有专门的独立日期类型或时间类型,所有针对系统当前时间的查询均由全局构造函数 Date 提供。当不传入任何参数直接调用 new Date() 时,程序会立即捕获执行瞬间的系统时间并返回一个日期对象。

// 实例化当前时间对象
const now = new Date();

// 查看默认输出(依据运行环境,通常呈现为带时区的标准字符串)
console.log(now);
// 示例输出: 2026-10-23T02:30:00.123Z 或 Fri Oct 23 2026 10:30:00 GMT+0800 (中国标准时间)

new Date() 得到的是一个对象实例,它封装了时间戳及相关读写方法。如果只写 Date()(不带 new 操作符),JavaScript 仅仅会返回一个表示当前时间的纯字符串,无法后续调用 getFullYear() 或 getMonth() 等成员方法。因此,获取时间并进行拆解处理时,务必使用 new Date()。

JavaScript怎么获取当前日期和时间
图 1:从创建实例到输出格式化时间的操作步骤

二、提取具体时间分量与避坑重点

一旦拥有了 Date 实例,就可以调用内置的 Getter 方法逐项取出年、月、日、时、分、秒、毫秒以及星期。在初学与实际开发中,极易出现概念混淆与偏移错误,需要特别注意以下细节:

const date = new Date();

const year = date.getFullYear();        // 年份(4位完整数字,如 2026)
const month = date.getMonth() + 1;      // 月份(注意:返回 0-11,实际月份必须 +1)
const day = date.getDate();             // 当月号数(1-31)
const weekDay = date.getDay();          // 星期几(0-6,0 代表星期日)
const hours = date.getHours();          // 小时(0-23,本地时区)
const minutes = date.getMinutes();      // 分钟(0-59)
const seconds = date.getSeconds();      // 秒(0-59)
const ms = date.getMilliseconds();      // 毫秒(0-999)

console.log(`当前时间分量: ${year}年 ${month}月 ${day}日 星期${weekDay} ${hours}:${minutes}:${seconds}`);
避坑重点清单:
  1. 月份必须加 1:getMonth() 的返回值从 0 开始计数(0 代表 1 月,11 代表 12 月)。直接使用 date.getMonth() 会导致月份比实际少一个月。
  2. 日期与星期的区分:getDate() 返回的是当月几号(1 到 31);而 getDay() 返回的是星期几(0 到 6,其中 0 代表周日)。获取日期时千万不要误写为 getDay()。
  3. 弃用 getYear():早期 JavaScript 存在 getYear() 方法,它返回的是当前年份减去 1900(如 2026 年会返回 126)。现代开发请一律使用 getFullYear()。
JavaScript怎么获取当前日期和时间
图 2:常用分量提取方法与关键易混淆细节对照

三、标准格式化输出:使用 padStart 优雅补零

通过 Getter 方法取出的分量都是纯数字。当遇到 5 月或 9 点时,方法返回的是单数字 5 或 9。但在实际业务中(例如日志记录、数据展示、请求参数),通常要求输出形如 YYYY-MM-DD HH:mm:ss 的定长格式。此时推荐使用 ES6 字符串方法 padStart(2, '0') 进行前导零对齐。

以下是开箱即用的时间格式化函数示例:

function formatCurrentTime() {
  const d = new Date();

  const year = d.getFullYear();
  // 必须先转为字符串再调用 padStart
  const month = String(d.getMonth() + 1).padStart(2, '0');
  const date = String(d.getDate()).padStart(2, '0');
  const hours = String(d.getHours()).padStart(2, '0');
  const minutes = String(d.getMinutes()).padStart(2, '0');
  const seconds = String(d.getSeconds()).padStart(2, '0');

  return `${year}-${month}-${date} ${hours}:${minutes}:${seconds}`;
}

// 执行调用
console.log(formatCurrentTime());
// 示例输出: "2026-10-23 09:05:08"

这种纯函数拼接方式逻辑直观、不依赖任何外部类库,在 Node.js 服务端以及所有现代浏览器中均能高效稳定运行。

四、现代化本地化格式化:Intl 与 toLocaleString

如果目标仅仅是在前端界面展示给用户看,无需手动拼接每一个分量,JavaScript 原生内置的国际化 API 提供了更简洁省力的方式。

1. toLocaleString 与 toLocaleDateString

通过传入语言代码(如 zh-CN)和配置选项,可以直接得到符合中文习惯的日期时间:

const now = new Date();

// 获取本地日期与时间(默认格式)
console.log(now.toLocaleString('zh-CN'));
// 示例输出: "2026/10/23 10:30:15"

// 仅获取当前日期
console.log(now.toLocaleDateString('zh-CN'));
// 示例输出: "2026/10/23"

// 仅获取当前时间
console.log(now.toLocaleTimeString('zh-CN'));
// 示例输出: "10:30:15"

// 自定义精细配置
const formatted = now.toLocaleString('zh-CN', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  hour12: false // 采用24小时制
});
console.log(formatted);
// 示例输出: "2026/10/23 10:30:15"

2. Intl.DateTimeFormat 高性能格式化

在需要对大量时间做循环格式化的场景下,重复调用 toLocaleString 会反复解析选项。创建单个 Intl.DateTimeFormat 实例并反复调用其实例的 format 方法,性能更优。

const formatter = new Intl.DateTimeFormat('zh-CN', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  hour12: false
});

console.log(formatter.format(new Date()));
// 示例输出: "2026/10/23 10:30:15"
JavaScript怎么获取当前日期和时间
图 3:三种主流格式化方案的特征与适用场景对比

五、快速获取当前时间戳:Date.now()

在计算代码运行耗时、生成唯一请求流水号或与后端接口进行时间戳比对时,我们不需要解析年月日字符串,只需要一个从 Unix 纪元(1970年1月1日 00:00:00 UTC)开始计算的毫秒数数值。获取当前时间戳有两种最常用的方式:

// 方式一:Date.now()(推荐:性能最高,无需实例化对象)
const timestamp1 = Date.now();
console.log(timestamp1); // 示例输出: 1792722600123 (13位毫秒时间戳)

// 方式二:已有 Date 实例调用 getTime()
const date = new Date();
const timestamp2 = date.getTime();
console.log(timestamp2); // 示例输出: 1792722600123

// 转换为 10 位秒级时间戳(常用于后端规范)
const unixSeconds = Math.floor(Date.now() / 1000);
console.log(unixSeconds); // 示例输出: 1792722600

如果不需要使用 date 实例做其他处理,直接使用 Date.now() 具有更好的性能和简洁度,因为它免去了创建底层内存对象的开销。

六、实践总结与技术选型决策

综合上述方法,在 JavaScript 中处理“当前日期和时间”的需求,可以根据业务目标直接匹配对应方案:

  • 需要完整可控的通用文本格式(如 YYYY-MM-DD HH:mm:ss):通过 new Date() 提取各分量,配合 String().padStart(2, '0') 拼接。
  • 页面直接展示本地化时间给用户:直接使用 date.toLocaleString('zh-CN') 或 Intl.DateTimeFormat。
  • 跨国业务或服务端持久化存储:使用 date.toISOString() 保存统一的 UTC 时间。
  • 仅用于运算、计时、排重排序:使用 Date.now() 直接获取 13 位毫秒数值。
JavaScript怎么获取当前日期和时间
图 4:按实际业务场景选择获取时间策略的决策示意图
作者最新文章
相关文章
更多