javascript中将时间戳转为格式化日期字符串最常用且可靠的方式是用date对象配合getfullyear()等方法手动拼接、tolocalestring()快速本地化或intl.datetimeformat现代api;需注意时间戳单位为毫秒、getmonth()返回0–11要+1、用padstart补零保证两位数。

JavaScript 中将时间戳转为格式化日期字符串,最常用且可靠的方式是用 Date 对象配合其方法(如 getFullYear()、toLocaleString() 或 Intl.DateTimeFormat),避免直接拼接字符串出错。
用 Date 构造函数 + 手动拼接(兼容性好,可控性强)
适用于需要精确控制年月日时分秒格式,比如 "2024-05-20 14:30:45":
- 时间戳单位是毫秒,注意传入的是毫秒值(如
1716215445000),不是秒;若后端给的是秒级时间戳,需乘以1000 - 用
new Date(timestamp)创建日期对象,再调用getYear()等方法获取各部分(注意getMonth()返回 0–11,要 +1) - 建议用
String.prototype.padStart(2, '0')补零,保证09而非9
示例:
function formatTimestamp(ts) {
const d = new Date(ts);
const y = d.getFullYear();
const m = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
const h = String(d.getHours()).padStart(2, '0');
const min = String(d.getMinutes()).padStart(2, '0');
const s = String(d.getSeconds()).padStart(2, '0');
return `${y}-${m}-${day} ${h}:${min}:${s}`;
}
formatTimestamp(1716215445000); // "2024-05-20 14:30:45"
用 toLocaleString() 快速本地化格式(简洁省心)
适合展示给用户看,自动适配系统语言和习惯(如中文环境输出“2024/5/20 下午2:30:45”):
- 支持
options参数精细控制,例如只显示日期、忽略秒、使用 24 小时制等 - 不推荐用于固定格式的接口字段或日志,因为结果依赖运行环境
示例:
const ts = 1716215445000;
new Date(ts).toLocaleString('zh-CN');
// "2024/5/20 下午2:30:45"
<p>new Date(ts).toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
});
// "2024/05/20 14:30:45"
</p>
用 Intl.DateTimeFormat(现代、高性能、推荐)
ES6+ 标准 API,比 toLocaleString() 更灵活,适合大量格式化场景(可复用 formatter 实例):
- 创建一次
Intl.DateTimeFormat实例,多次调用format(),性能优于反复调用toLocaleString() - 支持严格格式(如
dateStyle: 'short')、时区控制(timeZone: 'Asia/Shanghai') - 对国际化项目更友好,能处理农历、不同历法等高级需求
示例:
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
});
<p>formatter.format(1716215445000); // "2024/05/20 14:30:45"
</p>
小提醒:别踩这些坑
-
时间戳单位错误:JS 的
Date只认毫秒,秒级时间戳(10位)必须 ×1000 -
月份从 0 开始:
getMonth()返回 0–11,直接拼接会把 1 月变成 “0”,记得 +1 -
时区问题:
toString()、toUTCString()等方法行为不同,明确需求用本地时间还是 UTC 时间 -
无效时间戳:传入
null、undefined或NaN会得到Invalid Date,建议加校验











