JavaScript日期格式转换:如何将指定日期转为目标格式?
解决日期格式转换问题
嘿,我来帮你搞定这个日期格式转换的需求!你需要把cdate = 2016-06-29 23:45:42转换成Wed 06/29/2016 11:45 PM格式,而原生new Date()返回的带时区的字符串,其实是因为Date对象默认会展示本地时区信息,但我们可以通过两种方式实现目标格式:
方法一:手动拆解日期字段(兼容性好)
这种方法适合所有浏览器,手动提取日期的各个部分,再拼接成目标格式:
function formatTargetDate(cdateStr) { // 先把空格分隔的日期字符串转成ISO格式,确保Date能正确解析 const isoDateStr = cdateStr.replace(' ', 'T'); const date = new Date(isoDateStr); // 定义星期缩写数组 const weekShortNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; const weekDay = weekShortNames[date.getDay()]; // 提取月份、日期并补零到两位 const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const year = date.getFullYear(); // 处理12小时制和AM/PM let hours = date.getHours(); const ampm = hours >= 12 ? 'PM' : 'AM'; // 23%12=11,0点的话转成12 hours = hours % 12 || 12; const formattedHours = String(hours).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); // 拼接成目标格式 return `${weekDay} ${month}/${day}/${year} ${formattedHours}:${minutes} ${ampm}`; } // 测试一下 const cdate = "2016-06-29 23:45:42"; console.log(formatTargetDate(cdate)); // 输出: Wed 06/29/2016 11:45 PM
方法二:使用Intl.DateTimeFormat(简洁现代)
现代浏览器支持的Intl.DateTimeFormat API可以快速生成本地化格式,我们只需要配置对应的选项即可:
function formatDateWithIntl(cdateStr) { const isoDateStr = cdateStr.replace(' ', 'T'); const date = new Date(isoDateStr); // 配置格式选项 const formatOptions = { weekday: 'short', month: '2-digit', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', hour12: true }; // 生成格式字符串,然后去掉默认的逗号 const formattedDate = new Intl.DateTimeFormat('en-US', formatOptions).format(date); return formattedDate.replace(/,/g, ''); } // 测试 console.log(formatDateWithIntl(cdate)); // 输出: Wed 06/29/2016 11:45 PM
注意事项
- 如果你原日期是UTC时间而不是本地时间,需要把代码中的
getHours()、getMonth()等方法换成getUTCHours()、getUTCMonth(),确保提取的是UTC时间的字段。 - 第一步把空格换成
T是为了让所有浏览器都能正确解析日期字符串,避免部分浏览器不识别YYYY-MM-DD HH:mm:ss格式的问题。
内容的提问来源于stack exchange,提问作者Matarishvan
相关产品推荐
相关产品推荐

