LWC中ISO 8601日期转MM-DD-YYYY HH:mm并添加AM/PM方法
在LWC中为ISO 8601日期添加AM/PM标识的解决方案
针对你的需求,这里提供两种可行的实现方式:
方法一:基于现有拆分代码修改
你已经通过split拆分了ISO日期字符串,只需添加小时判断逻辑即可实现AM/PM标识,同时修正格式顺序以匹配MM-DD-YYYY HH:mm的需求:
const dateStr = '2020-06-21T10:15:00Z'; const [yyyy, mm, dd, hh, mi] = dateStr.split(/[/:-T]/); // 将24小时制小时转为数字,判断AM/PM const hourNum = Number(hh); const period = hourNum < 12 ? 'AM' : 'PM'; // 转换为12小时制显示规则(0点转12,13点转1等) const formattedHour = hourNum % 12 === 0 ? 12 : hourNum % 12; // 按MM-DD-YYYY HH:mm AM/PM格式输出 console.log(`${mm}-${dd}-${yyyy} ${formattedHour}:${mi} ${period}`); // 输出:06-21-2020 10:15 AM
方法二:使用Intl.DateTimeFormat(推荐)
手动拆分ISO字符串容易遇到格式变体(如带毫秒的YYYY-MM-DDTHH:mm:ss.sssZ),LWC中推荐使用原生的Intl.DateTimeFormat来处理日期格式化,更健壮且自动兼容时区:
const dateStr = '2020-06-21T10:15:00Z'; const date = new Date(dateStr); // 配置格式化规则:指定UTC时区、12小时制、两位数字的月/日/时/分 const formatter = new Intl.DateTimeFormat('en-US', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: true, timeZone: 'UTC' // 原日期带Z标识为UTC时间,需指定时区避免本地时区干扰 }); // 格式化后默认用/分隔日期,替换为-以匹配需求格式 const formattedDate = formatter.format(date).replace(/\//g, '-'); console.log(formattedDate); // 输出:06-21-2020 10:15 AM
注意:如果你的业务需要处理用户本地时区,只需移除
timeZone: 'UTC'配置即可自动适配当前用户时区。
内容的提问来源于stack exchange,提问作者subhashini uppalapati
相关产品推荐
相关产品推荐

