React Native在不远程调试时的反应不同


<Text style={s.date}>{ new Date(this.props.order.ordered_at).toLocaleDateString('en-US', { day: '2-digit', month: 'short' }) }</Text>
<Text style={s.time}>({ new Date(this.props.order.ordered_at).toLocaleTimeString('en-US', { hour: '2-digit', minute:'2-digit', hour12: true }) })</Text>

JS远程调试关闭时输出

02/13/17 (23:51:31)
02/13/17 (23:48:07)

JS远程调试在上时的输出

Feb 13 (11:51 PM)
Feb 13 (11:48 PM)

是什么原因导致的,我该如何解决

import moment from 'moment';
<Text style={s.date}>{ moment(new Date(this.props.order.ordered_at)).format('ll') }</Text>
<Text style={s.time}>{ moment(new Date(this.props.order.ordered_at)).format('LT') }</Text>

将持续产生

Feb 13, 2017 (11:51 PM)
Feb 13, 2017 (11:48 PM)

为什么通常的Date()方式不起作用?

JavaScript运行时使用React Native时,您将在两个环境中运行JavaScript代码:

  • 在iOS模拟器和设备上,Android模拟器和设备React Native使用JavaScriptCore,这是一个为Safari。在iOS上,JSC不使用JIT,因为缺少可写iOS应用程序中的可执行内存
  • 当使用Chrome调试时,它在Chrome内部运行所有JavaScript代码,并通过WebSocket与本地代码通信。所以你正在使用V8

虽然两种环境非常相似,但您最终可能会遇到一些不一致。我们可能会尝试使用其他JS发动机,因此最好避免依赖任何运行时。

因此,如评论中所述,最好使用momentJS,而不是盲目依赖环境的JS,因为这可能会导致文档中所述的不一致

在开始使用以下代码之前,我一直面临着同样的问题:

moment(`${post.date}+02:00`).

这里我使用了+02:00,因为服务器日期在GMT+2时区。你应该更改它来调整你的服务器日期时区

相关内容

  • 没有找到相关文章