避雷 toLocalString()
难绷程度
😡红温了
😶无语了
😅流汗了✅
环境
node: v22.19.0
wot-design-uni: 1.11.1
vue: 3.5.1
Demo 复现
ts
const formatDate = (date: Date) => {
return new Date(date).toLocaleString('zh-CN', {
hour12: false
})
}
console.log(formatDate(new Date()))预期输出 '2025/11/23 14:36:24'
实际输出 Sun Nov 23 2025 14:35:46 GMT+0800 (CST)
分析
小程序的 toLocaleString() 方法似乎处理成了 toString(),其他的 toLocaleTimeString() 和 toLocaleDateString() 也有同样的问题。这个BUG 从 2018 年直到 2025 年也未解决。所以最保险的办法是用 Date 对象逐次获取年月日时分秒,然后拼接成字符串。
解决
ts
const formatDate = (date: Date) => {
const d = new Date(date);
const year = d.getFullYear();
const month = String(d.getMonth() + 1).padStart(2, '0');
const day = String(d.getDate()).padStart(2, '0');
const hour = String(d.getHours()).padStart(2, '0');
const minute = String(d.getMinutes()).padStart(2, '0');
const second = String(d.getSeconds()).padStart(2, '0');
return `${year}/${month}/${day} ${hour}:${minute}:${second}`;
}
console.log(formatDate(new Date()))