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

React Native选择2035年后日期调用JS Date方法致应用崩溃如何解决

React Native 2035年后日期调用Date方法崩溃解决方案

触发原因

  • 该问题核心是旧版本React Native搭载的Hermes引擎存在缺陷,0.70版本之前的Hermes内置ICU组件设置的时间戳上限过低,无法处理2035/2038年之后的远日期,调用toLocale*系列国际化Date方法时会直接触发崩溃
  • 未开启Hermes的项目出现该问题,通常是安卓端系统WebView内核版本过低,内置JS引擎对远日期的国际化处理存在兼容问题
  • 普通非国际化Date方法(如getFullYear、getTime)一般不会触发该问题

解决方案

方案1:升级RN版本(优先推荐)

将项目React Native版本升级至0.70及以上,对应版本的Hermes引擎已经修复了该缺陷,升级后原生Date方法可正常处理9999年以内的所有日期。
验证代码:

let dates = new Date("2060-08-25T23:15:30.000Z").toLocaleDateString();
// 升级后可正常输出日期,无崩溃

方案2:替换原生日期格式化实现(无法升级版本时使用)

如果项目受依赖限制无法升级RN版本,可完全弃用原生Date的toLocale*系列方法,改用纯JS实现的轻量日期库处理日期格式化:

  1. 安装dayjs或date-fns作为日期处理工具
  2. 替换原有写法,示例代码(以dayjs为例):
import dayjs from 'dayjs'
// 替换前的崩溃写法
// let dates = new Date("2060-08-25T23:15:30.000Z").toLocaleDateString();
// 替换后写法
let dates = dayjs("2060-08-25T23:15:30.000Z").format('YYYY-MM-DD')

注意:该方案属于临时兼容方案,所有涉及日期格式化、多语言日期显示的逻辑都需要统一替换,避免遗漏触发崩溃

方案3:限制日期选择范围(业务允许时使用)

如果业务不需要支持2035年之后的日期,可直接给日期选择器组件设置最大可选日期,从源头上避免用户选到触发崩溃的日期,示例代码(以@react-native-community/datetimepicker为例):

import DateTimePicker from '@react-native-community/datetimepicker';

<DateTimePicker
  maximumDate={new Date(2034, 11, 31)}
  // 其余属性保持不变
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:54:03