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

如何使用JavaScript将JSON日期格式化为dd/MM/yyyy格式

问题原因

你的代码报错是因为错误调用了getDate()方法:Date.getDate()仅返回代表当月日期的数字(比如对应日期2021-11-07的返回值为数字7),而parseISO()要求入参为ISO 8601格式的字符串,传入数字自然无法解析,最终得到无效日期。

解决方案

场景1:使用input返回的原始ISO字符串

如果你还保留着input控件直接返回的2021-11-07格式的字符串,直接传入parseISO即可:

import { format, parseISO } from 'date-fns'
// rawDeparting为input直接返回的原始字符串
const formattedDeparting = format(parseISO(rawDeparting), 'dd/MM/yyyy')
// 输出结果:07/11/2021

场景2:变量已经是Date对象实例

如果departing已经被转换为Mon Nov 08 2021 01:00:00 GMT+0100格式的Date对象,不需要调用parseISO,直接传入format即可:

import { format } from 'date-fns'
const formattedDeparting = format(departing, 'dd/MM/yyyy')

如果存在时区偏移导致日期显示差1天的问题,可以指定UTC时区格式化:

import { format, utcToZonedTime } from 'date-fns-tz'
const timeZone = 'UTC'
const zonedDate = utcToZonedTime(departing, timeZone)
const formattedDeparting = format(zonedDate, 'dd/MM/yyyy', { timeZone })

更便捷的Handlebars辅助函数方案

建议封装为Handlebars自定义辅助函数,后续所有模板都可以直接调用,不需要重复处理:

// 全局注册日期格式化辅助函数
import { format, parseISO } from 'date-fns'
Handlebars.registerHelper('formatDate', (date, pattern = 'dd/MM/yyyy') => {
  if (!date) return ''
  const dateInstance = typeof date === 'string' ? parseISO(date) : date
  return format(dateInstance, pattern)
})

模板中直接调用即可:

{{formatDate departing}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:18:00