如何将ISO时间格式转换为带AM/PM的指定日期时间显示格式?
解决ISO时间格式转换问题
你可以通过原生JavaScript的Date对象结合自定义逻辑实现需求,以下是两种可行方案:
方法一:手动提取字段格式化
直接操作Date对象的方法提取日期时间组件,按需拼接成目标格式:
function formatISODate(isoString) { const date = new Date(isoString); // 定义月份缩写数组 const monthAbbr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; // 提取日期部分(UTC时间) const day = date.getUTCDate(); const month = monthAbbr[date.getUTCMonth()]; const year = date.getUTCFullYear(); // 处理12小时制时间 let hours = date.getUTCHours(); const ampm = hours >= 12 ? 'PM' : 'AM'; hours = hours % 12; hours = hours || 12; // 将0点转为12点 // 补零处理分秒 const minutes = date.getUTCMinutes().toString().padStart(2, '0'); const seconds = date.getUTCSeconds().toString().padStart(2, '0'); // 拼接最终格式 return `${day} ${month} , ${year} :${hours}:${minutes}:${seconds} ${ampm}`; } // 测试示例 const currdate = "2022-11-28T10:26:00.949Z"; console.log(formatISODate(currdate)); // 输出:28 Nov , 2022 :10:26:00 AM
方法二:利用Intl.DateTimeFormat简化实现
借助浏览器原生国际化API,更简洁地完成格式化:
function formatISODate(isoString) { const date = new Date(isoString); // 生成日期部分并调整格式(将"Nov 28, 2022"转为"28 Nov , 2022") const dateFormatter = new Intl.DateTimeFormat('en-US', { day: 'numeric', month: 'short', year: 'numeric', timeZone: 'UTC' }); const [month, day, year] = dateFormatter.format(date).split(' '); const formattedDate = `${day} ${month} , ${year}`; // 生成12小时制时间部分 const timeFormatter = new Intl.DateTimeFormat('en-US', { hour: 'numeric', minute: '2-digit', second: '2-digit', hour12: true, timeZone: 'UTC' }); const formattedTime = timeFormatter.format(date).replace(',', ''); // 拼接结果 return `${formattedDate} :${formattedTime}`; } // 测试示例 const currdate = "2022-11-28T10:26:00.949Z"; console.log(formatISODate(currdate)); // 输出:28 Nov , 2022 :10:26:00 AM
注意事项
- 上述示例默认使用UTC时间转换,若需转为本地时间,只需将
getUTCDate()等UTC方法替换为getDate(),并移除Intl配置中的timeZone: 'UTC'即可。
内容的提问来源于stack exchange,提问作者abhigyan kr
相关产品推荐
相关产品推荐

