如何移除JavaScript Date()构造函数输出中年份后的时间内容
问题原因
你遇到的核心问题有两个:
- 最终输出带时间、时区后缀的内容,是因为你返回的是
Date构造函数创建的原始实例,而非格式化后的字符串。当你打印Date实例、或对其做隐式字符串转换时,JS会默认调用Date.prototype.toString()方法,该方法的返回值就是你看到的Mon Sep 06 2021 00:00:00 GMT+0100 (British Summer Time)格式。这个现象确实和你使用Date构造函数创建实例有关——你没有对实例做格式化就直接输出了。 - 现有代码的解析逻辑存在兼容性问题:无参数调用
toLocaleDateString()时,返回格式完全跟随用户运行环境的区域设置,并不固定为DD/MM/YYYY,在美式英语环境会返回MM/DD/YYYY、中文环境会返回YYYY/M/D,直接按/拆分取日、月、年的逻辑在非英区环境会直接解析错误。
另外原生JS的英文月份缩写默认是3位,September默认返回Sep,如果你需要Sept的写法,单独做一次替换即可。
修复方案
不需要先转成本地化字符串再拆分重构Date对象,直接在调用日期格式化方法时传入配置项,一步生成目标格式字符串即可,既避免了格式兼容问题,也不会出现多余的时间、时区后缀:
const convertDate = (epoch) => { // 指定区域和格式化规则,直接输出目标结构 const formatted = new Date(epoch * 1).toLocaleDateString('en-GB', { weekday: 'short', month: 'short', day: '2-digit', year: 'numeric' }); // 如果需要把默认的Sep替换为Sept,放开下一行注释即可 // return formatted.replace(/(\w{3}) Sep/, '$1 Sept'); return formatted; };
调用上述方法传入对应时间戳,会直接返回Mon Sep 06 2021(替换后返回Mon Sept 06 2021),不存在年份后的多余内容。
内容的提问来源于stack exchange,提问作者xstax
相关产品推荐
相关产品推荐

