Node.js中如何获取本地时间日期而非UTC时间生成YYYYMMDD格式串
问题原因
- 第一种写法中
toJSON()默认返回UTC时区的时间,如果你本地处于东八区等UTC偏移为正的时区,凌晨时段本地已进入当日,但UTC时间仍为前一天,就会出现结果比实际日期少1天的偏差。 - 第二种写法中
toLocaleDateString()的输出格式完全依赖运行环境的区域配置,不同语言、地区设置下输出的年/月/日顺序、分隔符都不固定,直接替换分隔符无法保证得到固定的YYYYMMDD格式。
可靠实现方案
最稳妥的方案是通过本地时间专属的日期取值方法,手动拆分年、月、日后拼接,完全不受时区、区域配置影响:
const now = new Date(); const year = now.getFullYear(); // 注意JS中月份从0开始计数,需要+1,不足两位时补前导零 const month = String(now.getMonth() + 1).padStart(2, '0'); // 日期不足两位时补前导零 const day = String(now.getDate()).padStart(2, '0'); const time = `${year}${month}${day}`;
这个写法的特点:
- 用到的
getFullYear()、getMonth()、getDate()方法均返回本地时区对应的时间值,不会出现UTC时差导致的日期错误 - 手动控制补零和拼接顺序,无论运行环境的区域设置如何,最终都会固定输出
20220629格式的8位日期字符串,完全适配图片文件名的生成需求。
如果需要兼容不支持padStart的极旧运行环境,可以用自定义补零逻辑实现:
// 数字补前导零工具函数 const addZero = (num) => num < 10 ? `0${num}` : num; const now = new Date(); const time = `${now.getFullYear()}${addZero(now.getMonth() + 1)}${addZero(now.getDate())}`;
内容的提问来源于stack exchange,提问作者Rahmat Oktrifianto
相关产品推荐
相关产品推荐

