2017-02-14 77 views
4
<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) 

是什麼造成這一點,怎麼辦我修復它?

+0

提到閱讀[官方文件(這可能會導致不一致https://facebook.github.io/react-native/docs/javascript-environment.html)以獲取更多信息,它對此進行了很好的解釋。作爲替代,您可以使用[moment](https://momentjs.com/)代替JS日期API。 – Xeijp

+0

最好使用MomentJs – Ataomega

回答

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運行在使用本機作出反應,你會在兩種環境中運行的JavaScript代碼:

  • 在iOS模擬器和設備,Android的模擬器和設備陣營本地使用其中的JavaScriptCore是支持Safari瀏覽器的JavaScript引擎。在iOS上由於在iOS應用程序中缺少可寫入 可執行內存,JSC不使用JIT。
  • 使用Chrome調試時,它會在Chrome本身內運行所有JavaScript代碼,並通過WebSocket與本機代碼進行通信。所以你 正在使用V8。

儘管兩種環境非常相似,但最終可能會遇到一些不一致的情況。我們很可能將在未來嘗試其他JS 引擎,因此最好避免依賴任何運行時的細節 。

所以,在評論中提到的,最好使用momentJS,而不是對環境的JS一味依靠做作爲docs

+0

date-fns比momenjs更好。請參閱https://bundlephobia.com/[email protected]與https://bundlephobia.com/[email protected] – MA1

相關問題