Skip to content

避雷 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()))