全面讲解在JavaScript中获取当前日期和时间的实用方法,涵盖new Date()基本调用、各时间分量解析、易混淆方法辨析、标准补零格式化、Intl本地化输出与时间戳获取。
JavaScript怎么获取当前日期和时间
时间:2026-10-30
浏览:234
文章目录
在 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()。
二、提取具体时间分量与避坑重点
一旦拥有了 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:
getMonth()的返回值从 0 开始计数(0 代表 1 月,11 代表 12 月)。直接使用date.getMonth()会导致月份比实际少一个月。 - 日期与星期的区分:
getDate()返回的是当月几号(1 到 31);而getDay()返回的是星期几(0 到 6,其中 0 代表周日)。获取日期时千万不要误写为getDay()。 - 弃用 getYear():早期 JavaScript 存在
getYear()方法,它返回的是当前年份减去 1900(如 2026 年会返回 126)。现代开发请一律使用getFullYear()。
三、标准格式化输出:使用 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"
五、快速获取当前时间戳: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 位毫秒数值。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。