如何正确格式化BigCommerce博客API的published_date日期字段
核心错误点
你之前的格式化逻辑存在两个和官方要求不匹配的问题:
- 官方要求的日期顺序是月/日/年(美式格式),对应示例
5/18/2018代表5月18日,你之前Moment写法用的DD/MM/YYYY是日/月/年顺序,日期逻辑完全错位 - 时间部分要求使用12小时制搭配AM/PM标识,你之前用的
HH是24小时制占位符,输出的时间格式不符合要求 - 额外说明:该字段虽然名称带
iso8601后缀,但实际不接受标准ISO 8601格式字符串,直接调用toISOString()输出的UTC时间必然报错。
正确格式化方法
原生JS实现(无第三方依赖)
直接基于Date对象提取字段拼接即可,注意月、日、小时不需要补前导零:
const originalDate = "2022-05-12T13:09:23-07:00"; const date = new Date(originalDate); const month = date.getMonth() + 1; // Date对象月份从0开始计数,需要+1 const day = date.getDate(); const year = date.getFullYear(); let hours = date.getHours(); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); // 转换12小时制 const ampm = hours >= 12 ? 'PM' : 'AM'; hours = hours % 12; hours = hours ? hours : 12; // 0点对应12点 const publishedDate = `${month}/${day}/${year} ${hours}:${minutes}:${seconds} ${ampm}`;
针对你提供的原始日期,这段代码会输出5/12/2022 1:09:23 PM,和官方给出的示例格式完全一致。
Moment.js实现
如果项目中已经引入Moment,修正format占位符即可:
const originalDate = "2022-05-12T13:09:23-07:00"; // 占位符说明:M=不补零月份,D=不补零日期,h=12小时制不补零小时 const publishedDate = moment(originalDate).format('M/D/YYYY h:mm:ss A');
注意不要写错占位符:
- 不要用
MM/DD:会输出带前导零的05/12,和官方要求的无前置零格式不符 - 不要用大写
HH:这是24小时制的占位符,必须用小写h对应12小时制
排错建议
如果调整格式后仍然返回400错误,可以先在请求体中移除published_date_iso8601字段测试接口是否能正常创建文章,排除其他字段报错的干扰,确认问题确实出在日期字段后再单独调试。
内容的提问来源于stack exchange,提问作者rogerio-romao
相关产品推荐
相关产品推荐

