在 React Native 上没有调试模式的时刻格式时间将成为无效日期

Mor*_*ton 7 momentjs react-native

时刻版本是 2.24.0

我的日期值是 2019-04-23 03:16:00 +0000 UTC

我用 moment 让它变成亚洲时间,就像:

const moment = require('moment');

const localTime = moment(date).format('YYYY/MM/DD HH:mm');

<Text>{localTime}</Text>
Run Code Online (Sandbox Code Playgroud)

本地时间将显示 2019/04/23 11:16

当我在调试模式下测试它时它工作。

但是当我关闭调试模式localTime

invalid date
Run Code Online (Sandbox Code Playgroud)

安卓和IOS都会出现这个问题。

有任何想法吗 ?

小智 3

对于在 Android 上遇到 Moment 日期/时间问题的任何其他人,特别是如果您从 React Native 0.59(或更早版本)迁移到 0.60+,Hermes 似乎改变了 Android 使用 Moment/日期的方式。但是,当调试器启用时它会起作用。事实证明,当您运行调试器时,它会从 Hermes 切换回 Chromium 引擎(或 V8?)。导致我们不得不使用控制台日志来追踪 Moment 解析问题。奇怪的是,在 Safari 中尝试相同的操作时也会出现问题。

如果您正在解析通过日、月、年的不同变量传递的日期,并且日或月没有前面的零(例如:01 vs 1),那么我建议这样做: const momentFormat = { y: birthYear, m: birthMonth, d: birthDay }; return Moment(momentFormat).format('MMMM Do, YYYY'); 这手动设置值而不是依赖于每个值值的格式正确或必须编写自定义代码以确保日/月值在需要时具有 0。