2017-07-07 8 views
0

両方でmoment.jsを使用するにはどうすればいいですか?オーストラリア&米国の時刻形式は?例えばMomentJS:MM/DD/YYYYとDD/MM/YYYYで日付をパースする方法

07/08/2017は - 両方の時間のフォーマットのために良いですが、!

30/08/2017は - moment.jsには無効ですが、私は、このようなdateTimeの

を持つことができますあなたはここでそれを確認することができます。

http://jsfiddle.net/rLjQx/2135/

+1

'7月8日/ 2017'がある一方、*両方のフォーマットで有効な*は、それは2つの完全に異なる日付を表すことを理解(7月8日、8月7日)。 –

答えて

3

パーサーはフォームXXXX-XXXXの桁がDD-MM-YYYYを表現していると仮定されます。 MM-DD-YYYYを受け入れる場合は、これを指定する必要があります。

例えばvar now2 = moment('08/30/2017', 'MM-DD-YYYY').format('MMM DD h:mm A');

また、あなたはそれが両方を認識するように受け入れたいのですが、異なるフォーマットの配列を指定することができますあなたのフィドルで

var now2 = moment('08/30/2017', ['DD-MM-YYYY', 'MM-DD-YYYY']).format('MMM DD h:mm A');

+0

+1しかし、瞬時のパーサ(最新のバージョンを使用)は、ブラウザに依存する(新しいものが矛盾している) 'new Date(文字列)'に単にフォールバックすることに注意してください。さらに、 '/'の代わりに '-'を使用したため、サンプルのフォーマットを修正するだけで、フォーマットの順序はあいまいな入力(質問に記載された' 07/08/2017 'など)に関係していることに注意してください。 – VincenzoC

+0

「パーザは英数字以外の文字を無視します」https://momentjs.com/docs/#/parsing/string-format/ –

+0

確かに3番目のパラメータを追加して厳密な解析を有効にすると、無効な日付'['DD/MM/YYYY'、 'MM/DD/YYYY']'の代わりに '['DD-MM-YYYY'、 'MM-DD-YYYY']'方法私はそれを指摘:)。 – VincenzoC

1

を瞬間呼び出しの2番目のパラメータを経由して形式を指定

var now2 = moment('30/08/2017', 'DD/MM/YYYY').format('MMM DD h:mm A'); 

それ以外の場合は、瞬時に知る方法がありません

ここで関連ドキュメント:https://momentjs.com/docs/#/parsing/string-format/

修正フィドル:http://jsfiddle.net/wu6wwsvp/

+0

ありがとう!私は – brabertaser19

+0

今それを呼び出す方法を試してみますか? ()のようなフォーマットですが? – brabertaser19

+0

フォーマットは文字列出力を作成します... – brabertaser19

2

使用しています非常に古いバージョンの瞬間(2.2.1)、それを最新のもの(2.18.1)にアップグレードすることをお勧めします。新しいバージョンを使用して

、あなたのコンソールで廃止の警告を持っています:

廃止警告:提供された値が認識RFC2822やISO形式ではありません。モーメントの作成は、すべてのブラウザとバージョンで信頼できないjs Date()に戻ります。非RFC2822/ISOの日付形式は推奨されず、今後のメジャーリリースで削除される予定です。詳細はhttp://momentjs.com/guides/#/warnings/js-date/を参照してください。

リンク(およびmoment(String)ドキュメント)に続いて、文字列を正しく解析するための形式を指定する必要があることがわかります。

Billy Reillyは、moment(String, String[])の解析機能を使用することをお勧めします。それを覚えてください:バージョン2.3.0 以降

、モーメントが使用する形式を決定するためにいくつかの簡単なヒューリスティックを使用しています。順序:

  • 有効な日付が無効なものよりも優先される形式が好ましい。
  • より多くの文字列を解析し、少ない文字列よりも多くの形式を使用する形式を使用することをお勧めします。つまり、より厳密な解析を優先します。
  • アレイよりも前の方が好ましいフォーマットです。

そこで07/08/2017が解釈される方法は、フォーマットのアレイパラメータ形式の順序に依存します。ここで

いくつかの例にスニペット:

var now = moment('30/08/2017', ['MM/DD/YYYY','DD/MM/YYYY']); 
 
var now2 = moment('08/30/2017', ['MM/DD/YYYY','DD/MM/YYYY']); 
 
var now3 = moment('07/08/2017', ['MM/DD/YYYY','DD/MM/YYYY']); 
 

 
console.log(now.format('MMM DD h:mm A')); // Aug 30 12:00 AM 
 
console.log(now2.format('MMM DD h:mm A'));// Aug 30 12:00 AM 
 
console.log(now3.format('MMM DD h:mm A'));// Jul 08 12:00 AM 
 

 
var now4 = moment('30/08/2017', ['DD/MM/YYYY','MM/DD/YYYY']); 
 
var now5 = moment('08/30/2017', ['DD/MM/YYYY','MM/DD/YYYY']); 
 
var now6 = moment('07/08/2017', ['DD/MM/YYYY','MM/DD/YYYY']); 
 

 
console.log(now4.format('MMM DD h:mm A')); // Aug 30 12:00 AM 
 
console.log(now5.format('MMM DD h:mm A')); // Aug 30 12:00 AM 
 
console.log(now6.format('MMM DD h:mm A')); // Aug 07 12:00 AM
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

関連する問題