在JavaScript中格式化日期时,能否交换星期与日期的位置?
我按照以下方式格式化了日期,但希望将weekday(星期)放在DD/MM/YYYY之后,是否可以实现?
当前输出:Friday, 16/06/2023, 12:00
期望输出:16/06/2023, Friday, 12:00
使用的代码如下:const options = { weekday: 'long', year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', }; const dt = new Date('2023-06-16T12:00:00Z').toLocaleDateString('en-GB', options) console.log(dt)
解决方案
方法一:拆分格式化后拼接
分别生成日期、星期、时间三个独立部分,再按目标顺序拼接,直观且兼容性强:
const date = new Date('2023-06-16T12:00:00Z'); // 生成DD/MM/YYYY格式的日期 const dateStr = date.toLocaleDateString('en-GB', { year: 'numeric', month: 'numeric', day: 'numeric' }); // 生成完整星期名称 const weekdayStr = date.toLocaleDateString('en-GB', { weekday: 'long' }); // 生成HH:MM格式的时间 const timeStr = date.toLocaleTimeString('en-GB', { hour: 'numeric', minute: 'numeric' }); // 拼接成目标格式 const result = `${dateStr}, ${weekdayStr}, ${timeStr}`; console.log(result); // 输出:16/06/2023, Friday, 12:00
方法二:用formatToParts自定义组装
通过Intl.DateTimeFormat的formatToParts方法拆分格式化组件,按需重新排序组合,适合精细控制格式的场景:
const date = new Date('2023-06-16T12:00:00Z'); const formatter = new Intl.DateTimeFormat('en-GB', { weekday: 'long', year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', }); // 获取拆分后的各个格式组件 const parts = formatter.formatToParts(date); // 提取日期相关组件并拼接 const datePart = parts.filter(p => ['day', 'month', 'year', 'literal'].includes(p.type)) .map(p => p.value).join(''); // 提取星期组件 const weekdayPart = parts.find(p => p.type === 'weekday').value; // 提取时间相关组件并拼接 const timePart = parts.filter(p => ['hour', 'minute', 'literal'].includes(p.type)) .map(p => p.value).join(''); // 组装成目标格式 const result = `${datePart}, ${weekdayPart}, ${timePart}`; console.log(result); // 输出:16/06/2023, Friday, 12:00
方法三:正则表达式替换(快速方案)
如果确认toLocaleDateString输出格式固定,可直接用正则调换星期和日期的位置,适合快速修改:
const options = { weekday: 'long', year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', }; const originalStr = new Date('2023-06-16T12:00:00Z').toLocaleDateString('en-GB', options); // 正则替换,调换星期和日期部分的位置 const result = originalStr.replace(/^(\w+), (\d{2}\/\d{2}\/\d{4}), (.*)$/, '$2, $1, $3'); console.log(result); // 输出:16/06/2023, Friday, 12:00
内容的提问来源于stack exchange,提问作者aca
相关产品推荐
相关产品推荐

