2016-01-04 16 views
11

React Nativeで日付文字列をフォーマットしようとしています。ネイティブで日付文字列をフォーマットする

例:2016年1月4日10時34分23秒

以下は、私が使用しているコードです。

var date = new Date("2016-01-04 10:34:23"); 
console.log(date); 

私の問題は、私はiPhone 6Sでこれをエミュレートしていたとき、ある、それは何の問題もなく月Jan 04 2016 10:34:23 GMT+0530 (IST)を印刷します。しかし、私がiPhone 5Sを試しても、何も印刷されません。 date.getMonth()のような方法で月を取得しようとすると、"NaN"が印刷されます。

これはなぜですか?回避策は何ですか?

+3

あなたはこの解決策を見つけましたか? –

答えて

31

美しさは、それがMoment.jsのようなJS Librarieisの多くをサポートしていることです。 moment.jsを使用する代わりに、スクラッチ

からちょうどターミナルでこれを実行するコーディングの日付/時刻を処理するためのより良い/簡単な方法のようになります。

npm install moment --save 

そして、あなたのネイティブのjsのページリアクトで:

import Moment from 'moment'; 

render(){ 
    Moment.locale('en'); 
    var dt = '2016-05-02T00:00:00'; 
    return(<View> {Moment(dt).format('d MMM')} </View>) //basically you can do all sorts of the formatting and others 
} 

あなたはBULを含める必要はありません https://momentjs.com/docs/

1

Dateコンストラクタは、それが許す範囲で非常に厄介です。渡す文字列は、Date.parse()によってサポートされている必要があります。サポートされていない場合は、NaNを返します。これらのフォーマットが公式のISOドキュメントから逸脱する場合、異なるバージョンのJavaScriptが異なるフォーマットをサポートします。

サポートされているもののために、ここでの例を参照してください。リアクトネイティブのhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

3

ここでドキュメント公式moment.jsをチェックしてこのような単純な問題を解決するためにMoment.jsなどのkyライブラリを使用しています。

あなたが直面している問題は、書式設定ではなく、解析中です。

John Shammasが別の答えで言及しているように、Dateのコンストラクタ(およびDate.parse)は、入力に関して不安定です。 2016-01-04 10:34:23は1つのJavaScript実装では動作しますが、必ずしも別のJavaScript実装で動作するとは限りません。

According to the specification of ECMAScript 5.1Date.parseは、ISO 8601をサポートしています(簡略化しています)。これは良いニュースです。あなたの日付は既にISO 8601のようなものです。

入力フォーマットを少し変更するだけです。 Tのスペースを交換:2016-01-04T10:34:23;必要に応じてタイムゾーン(2016-01-04T10:34:23+01:00)を追加します。それ以外の場合はUTCが仮定されます。そのため、日付文字列の構文解析における分散の

1
function getParsedDate(date){ 
    date = String(date).split(' '); 
    var days = String(date[0]).split('-'); 
    var hours = String(date[1]).split(':'); 
    return [parseInt(days[0]), parseInt(days[1])-1, parseInt(days[2]), parseInt(hours[0]), parseInt(hours[1]), parseInt(hours[2])]; 
} 
var date = new Date(...getParsedDate('2016-01-04 10:34:23')); 
console.log(date); 

、結果が矛盾しているよう は常に手動で2015年10月12日12」のように、特に文字列 異なるのECMAScript実装で、 を文字列を解析することをお勧めします:00:00 "は、NaN、UTC、またはローカル タイムゾーンとして解析されます。

...リソースで説明したように:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

関連する問題