2017-03-02 7 views
1

JavaScriptで日付を解析しようとしていますが、特定の形式は私に合っています。私はクレジットカード会社からデータをエクスポートしましたが、日付フィールドのフォーマットはDate.parseまたはmoment().isValid()と互換性がありません。解析日 "01/01/2016金"

など。

Date.parse("01/01/2016 Fri") // NaN 
moment("01/01/2016 Fri") // false 

私は、これは日付が異なるフォーマットであってもよく、CSVインポートユーティリティのために使用されているので、私は正規表現.test()または.matches()で何かをやるべきかどうか分かりません。上記のユーティリティ関数がうまくいかないことに私は驚きました。

+0

曜日が重要でない場合は、有効な日付文字列を残して 'Fri'をトリミングすることができます。曜日はいつでも再計算するか、または「分割する」ことができるので、それでもアクセスできます。 – Jake

+0

いくつの日付形式ですか?質問にすべての形式をリストできますか? –

答えて

0

in the Moment docsを見ると、任意の形式の日付の解析方法を確認できます。最初の引数は日付文字列、2番目の引数は書式文字列です。英数字は無視されるため、スラッシュとダッシュを気にする必要はありません。

moment("01/01/2016 Fri", "MM-DD-YYYY ddd)

+1

"Alpha * numeric *"は数字を意味します。 – pinkfloydx33

+0

@ pinkfloydx33は正しいです。実際には、英数字以外の文字は無視されています。 'ddd'は入力の一部として曜日を解析できるはずです。 – Cass

0

Mozilla MDN on Date.parse()をチェックアウト:

、parse()メソッドは、(例えば、 "1995年12月25日" のような)日付文字列を取り、 は1月1日からのミリ秒数を返します。 1970、00:00:00 UTC。この関数は、たとえば、setTime()メソッドおよび Dateオブジェクトと組み合わせて、文字列 の値に基づいて日付値を設定する場合に便利です。

時間を表す文字列が与えられた場合、parse()は時間値を返します。 は、RFC2822/IETFの日付構文(RFC2822のセクション3.3)を受け入れます。 "1995年12月25日13:30:00 GMT"となります。大陸のUS タイムゾーンの略語を理解していますが、一般的には、タイムゾーンのオフセット「 」を使用してください。「1995年12月25日13:30:00 +0430」(4時間30分 グリニッジの東子午線)。このことから

が、それはあなたの問題はあなたが不適切な形式で日付を与えているということであるように見えます:

それ は、RFC2822/IETF日付構文を受け付ける(RFC2822の3.3節)、例えば "1995年12月25日13:30:00 GMT"となります。

チェックこのアウト:ECMA-262で定義されたISO形式として認識されていない日付文字列で

無効な値がまたは、提供ブラウザと値に応じて、NaNの中などを生じさせないことがあります。

// Non-ISO string with invalid date values 
new Date('23/25/2014'); 

TL; DR - あなたはそれがNaNを返すだ理由である、認識されない形式で値を渡しています。

Regexesのソースを試してください:Regexlib.comサイトは少し古いですが、情報は素晴らしいです。さまざまな日付形式のさまざまなRegexesがあります。

+0

あなたは最も重要な部分を引用していないようです: "*** Date.parse ... ***を使用することは推奨されていません"。 – RobG

+0

@RobGありがとう!私はそれを修正します。 –