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

时间:2017-02-14 04:44:02

标签: javascript react-native remote-debugging

<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)

造成这种情况的原因以及如何解决?

2 个答案:

答案 0 :(得分:7)

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,它是强大的JavaScript引擎   苹果浏览器。在iOS上由于缺少可写,JSC不使用JIT   iOS应用程序中的可执行内存。
  •   
  • 使用Chrome调试时,它会运行Chrome中的所有JavaScript代码,并通过WebSocket与本机代码进行通信。那么你   正在使用V8。
  •   
     

虽然两个环境非常相似,但最终可能会遇到一些   不一致。我们可能会尝试其他JS   未来的发动机,所以最好不要依赖于细节   任何运行时。

因此,正如评论中所提到的,最好使用momentJS而不是盲目地依赖于环境的JS,这会导致docs

中提到的不一致

答案 1 :(得分:0)

在我开始使用以下代码之前,我遇到了同样的问题:

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

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