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

react-datepicker如何设置自定义初始日期解决无效日期报错

报错原因

触发invalid time/date error是两个写法问题导致的:

  • 代码中useState(2022-06-08)未给日期值加引号,JS会把这段内容识别为减法算术表达式,计算结果为数字2008,完全不符合日期参数的格式要求。
  • react-datepicker组件的selected属性仅接收标准JavaScript Date实例,就算你给2022-06-08补上引号写成字符串格式直接传入,组件也无法识别,同样会抛出日期无效错误。
可行解决方案

把接口返回的YYYY-MM-DD格式字符串转换为标准Date对象,再传给组件作为初始值即可,基础实现代码如下:

const Datepicker = ({ date }: any) => {
  // date为接口返回的"2022-06-08"格式字符串,转为Date实例后再作为初始值
  const [data, setData] = useState<Date | null>(date ? new Date(date) : null)

  return <DatePicker selected={data} onChange={(e: Date) => setData(e)} />
}

如果需要兼容Safari浏览器(Safari对YYYY-MM-DD格式的字符串日期解析存在兼容问题),可以使用手动拆分字段的方式生成Date实例,兼容性更好:

// 通用日期转换方法,兼容所有主流浏览器
const parseStringToDate = (dateStr: string) => {
  if (!dateStr) return null
  const [year, month, day] = dateStr.split('-').map(Number)
  // 注意Date构造函数的月份参数从0开始计数,需要对传入的月份值减1
  return new Date(year, month - 1, day)
}

const Datepicker = ({ date }: any) => {
  const [data, setData] = useState<Date | null>(parseStringToDate(date))

  return <DatePicker selected={data} onChange={(e: Date) => setData(e)} />
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:36:25