如何获取「月份缩写 日, 年 时:分:秒 AM/PM」格式的JavaScript日期?
解决Date格式化为
Apr 22, 2018 12:44:58 PM的问题 嘿,我明白你要的格式——Apr 22, 2018 12:44:58 PM,而toUTCString()确实只会返回带GMT后缀的标准UTC格式,完全不符合需求。给你几个实用的原生JS解决方案,不用依赖任何第三方库:
方法1:手动拼接原生Date方法(兼容性拉满)
这种方法适配所有浏览器/Node.js版本,完全自己控制格式细节:
function formatCustomDate(date, useUTC = false) { // 月份缩写数组 const monthAbbrs = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 根据是否用UTC获取日期组件 const month = monthAbbrs[useUTC ? date.getUTCMonth() : date.getMonth()]; const day = useUTC ? date.getUTCDate() : date.getDate(); const year = useUTC ? date.getUTCFullYear() : date.getFullYear(); // 处理12小时制和AM/PM标识 let hours = useUTC ? date.getUTCHours() : date.getHours(); const ampm = hours >= 12 ? 'PM' : 'AM'; hours = hours % 12; hours = hours === 0 ? 12 : hours; // 把0点/12点转为12 // 补零处理分钟和秒,确保是两位数 const minutes = String(useUTC ? date.getUTCMinutes() : date.getMinutes()).padStart(2, '0'); const seconds = String(useUTC ? date.getUTCSeconds() : date.getUTCSeconds()).padStart(2, '0'); return `${month} ${day}, ${year} ${hours}:${minutes}:${seconds} ${ampm}`; } // 测试本地时间 console.log(formatCustomDate(new Date())); // 输出示例:Apr 22, 2018 12:44:58 PM // 测试UTC时间(对应你之前的Sun, 22 Apr 2018 10:45:19 GMT) console.log(formatCustomDate(new Date('Sun, 22 Apr 2018 10:45:19 GMT'), true)); // 输出:Apr 22, 2018 10:45:19 AM
方法2:使用Intl.DateTimeFormat(现代简洁方案)
如果你的运行环境支持ES6+(现代浏览器、Node.js 10+),用Intl.DateTimeFormat会更简洁,代码可读性更高:
function formatCustomDate(date, useUTC = false) { return new Intl.DateTimeFormat('en-US', { timeZone: useUTC ? 'UTC' : undefined, month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', second: '2-digit', hour12: true }).format(date); } // 测试UTC时间 console.log(formatCustomDate(new Date('Sun, 22 Apr 2018 10:45:19 GMT'), true)); // 输出:Apr 22, 2018 10:45:19 AM
小提示
- 如果需要本地时间,调用时不传第二个参数或者传
false即可。 - 两种方法都可以直接封装成工具函数,方便项目中复用。
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

