JavaScript 如何格式化日期
生活里,我们经常要处理日期:比如记录快递的签收时间、整理照片的拍摄日期、给客户发周报时要标清楚日期,这些场景里的日期往往需要统一格式,不然看着就乱。很多人刚写代码的时候,遇到日期显示成“Wed May 15 2024 14:30:00 GMT+0800 (中国标准时间)”这种看不懂的格式,就会头疼——其实用JavaScript处理日期格式,根本不用死记复杂规则,跟着步骤走就能搞定。
先搞懂:JS里的日期是什么?
JS里的日期是个特殊的“时间对象”,就像你手机的日历APP,能存从1970年到现在的所有时间点。比如你写new Date(),就能调出当前的时间,精确到毫秒。但这个时间对象本身是机器用的“内部格式”,给人看的时候必须转成“年月日时分秒”的样子,这就是格式化的作用。举个例子:你手机日历存的是一个“时间点”,但你设置的“2024年5月15日 周三”,就是把那个时间点转成了人类看得懂的格式。

最常用的两种格式化方法
处理JS日期格式,大部分场景用两种方法就够了,不用学复杂的,先记这两个:
第一种是手动拼接基础值,适合需要自定义格式的场景。比如你要做“2024-05-15 14:30”这种“年-月-日 时:分”的格式,就把时间对象里的年、月、日、时、分这些值抠出来,再用符号拼起来。这里要注意一个坑:JS里的月份是从0开始数的!比如1月是0,5月是4,所以得给月份加1,不然会少1个月。举个实际代码例子:
`js
const now = new Date(); // 拿到当前时间
const year = now.getFullYear(); // 拿到年,比如2024
const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份加1,补0成两位,比如5变05
const date = String(now.getDate()).padStart(2, '0'); // 日期补0,比如5变05
const hours = String(now.getHours()).padStart(2, '0'); // 时补0
const minutes = String(now.getMinutes()).padStart(2, '0'); // 分补0
const formatDate = ${year}-${month}-${date} ${hours}:${minutes};
console.log(formatDate); // 输出:2024-05-15 14:30 这样的格式
`
这个方法的好处是完全自定义,想加斜杠、想换顺序都能调,比如要“15/05/2024”就把符号换成斜杠就行。
第二种是用原生的toLocaleString(),适合要适配地区格式的场景。比如国内要“YYYY年MM月DD日 HH:mm:ss”,国外要“MM/DD/YYYY”,不用自己拼,这个方法直接帮你搞定。还是举例子:
`js
const now = new Date();
// 国内常用格式
const chinaDate = now.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
console.log(chinaDate); // 输出:2024/5/15 14:30:00,也能调整成2024年05月15日的格式
// 美式格式
const usDate = now.toLocaleString('en-US');
console.log(usDate); // 输出:5/15/2024, 2:30:00 PM
`
这个方法不用自己处理补0、月份加减的问题,只要选对地区参数就行,新手用起来特别省心。
避坑:新手常犯的两个错误
第一个是月份少1个月,刚才说过,JS的月份是0到11,比如5月是4,要是忘了加1,输出就会变成4月,就像你记日子的时候把日历翻错了页。第二个是日期或月份没补0,比如5月会变成5,不是05,要是做表格的日期列,会显得不整齐,用刚才例子里的padStart(2, '0')就能解决,就像给个位数的日期前面加个0,凑成两位数,好看又统一。
其实JS格式化日期不用追求复杂的方法,大部分日常场景用手动拼接或toLocaleString就够了,等以后遇到更复杂的需求,再考虑用第三方库也不迟——先把基础方法练熟,处理日常的日期问题就完全够用了。