You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS如何将Jun 02,2022 CDT日期格式转换为06/02/2022 时分格式

日期格式转换实现方案

需求是将Jun 02, 2022 at 05:55 AM CDT格式的日期,转换为06/02/2022 at 05:55 AM格式,原有默认配置的Intl.DateTimeFormat无法满足输出要求,原有代码如下:

order.messageSentOn = new Intl.DateTimeFormat('en-US').format(dbDate);

问题原因

默认实例化的Intl.DateTimeFormat仅会输出en-US区域的默认短日期格式,不会携带时间片段,也无法自定义拼接出需要的「月/日/年 at 时分 上下午」结构。

可直接使用的实现

方案1:基于Intl.DateTimeFormat自定义配置

通过给格式化方法传入明确的规则参数,搭配formatToParts提取各片段后按需求拼接即可,该方案兼容性好,不需要手动处理补0、上下午判断逻辑:

// 原始日期转Date对象,原生Date可直接识别CDT时区格式
const dbDate = new Date("Jun 02, 2022 at 05:55 AM CDT");
const formatter = new Intl.DateTimeFormat('en-US', {
  month: '2-digit',
  day: '2-digit',
  year: 'numeric',
  hour: '2-digit',
  minute: '2-digit',
  hour12: true,
  // 如果需要固定保留CDT(美国中部时区)时间,避免跨环境时区偏移,加上下面这行
  // timeZone: 'America/Chicago'
});
const parts = Object.fromEntries(
  formatter.formatToParts(dbDate).map(item => [item.type, item.value])
);
order.messageSentOn = `${parts.month}/${parts.day}/${parts.year} at ${parts.hour}:${parts.minute} ${parts.dayPeriod}`;

运行后输出结果完全匹配目标格式:06/02/2022 at 05:55 AM。

方案2:手动提取日期字段拼接

逻辑更直观,不依赖Intl配置,适合需要完全自主控制拼接逻辑的场景:

const dbDate = new Date("Jun 02, 2022 at 05:55 AM CDT");
// 数字补0工具
const pad2 = n => String(n).padStart(2, '0');
const month = pad2(dbDate.getMonth() + 1); // Date月份从0开始计数,需要+1
const day = pad2(dbDate.getDate());
const year = dbDate.getFullYear();
const rawHour = dbDate.getHours();
const period = rawHour >= 12 ? 'PM' : 'AM';
const hour = pad2(rawHour % 12 || 12); // 0点转换为12
const minute = pad2(dbDate.getMinutes());
order.messageSentOn = `${month}/${day}/${year} at ${hour}:${minute} ${period}`;

内容的提问来源于stack exchange,提问作者Rakhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:48:34