2016-10-31 10 views
0

電子メールから(多くの可能な形式で)日付を抽出し、それをISO形式を必要とするアプリケーションに渡します。私は、さまざまなフォーマットの日付を解析するためにmoment.jsを使用できると言われています。moment.jsで任意の日付/時刻を解析する

Found: 1/22/2016 
Milliseconds: 1453449600000 
ISO: Fri Jan 22 2016 00:00:00 GMT-0800 (PST) 

Found: Jan 22 2016 
Milliseconds: 1453449600000 
ISO: Fri Jan 22 2016 00:00:00 GMT-0800 (PST) 

Found: 2016/1/22 03:00 
Milliseconds: 1453460400000 
ISO: Fri Jan 22 2016 03:00:00 GMT-0800 (PST) 

どのようにこれらの形式とそれ以上のすべてを解析するために瞬時を使用しますか?

var foundDue = taskNote.match(/(Deadline|Due):.*(\n|$)/ig); 
// if we've found a deadline date... 
if (foundDue) { 
    // Remove deadline/due tag 
    foundDue = foundDue[0].replace(/(Deadline|Due):? */i, ""); 
    // Remove trailing and leading spaces 
    foundDue = foundDue.replace(/(^\s*|\s$)*/, ""); 
    console.log("Found: "+ foundDue); 
    // Use a magic method to parse date 
    milliseconds = moment.??????(foundDue); 
    console.log("Milliseconds: "+ milliseconds); 
    console.log("Parsed2: "+ new Date(foundDue)); 
    var taskDue = new Date(milliseconds); 
    console.log("ISO: "+ taskDue); 
} 

注:この質問は、earlier questionから変更されています。

+0

あなたの「1/22/2016」の例はあいまいではありませんが、電子メールの日付が「1/2/2016」の場合はどうなりますか - それは2月1日か2月1日かをどのように知っていますか? – nnnnnn

答えて

0

moment parsing with multiple formatsを使用すると、入力文字列をモーメントオブジェクトに変換できます。次に、瞬間valueOf()を使用してミリ秒単位で取得できます。

ここでは、あなたの質問に与えられた入力の例の抜粋:複数の形式を使用している場合ドキュメントは、言うように、

var inputs = ['1/22/2016', 'Jan 22 2016', '2016/1/22 03:00']; 
 

 
for(var i=0; i<inputs.length; i++){ 
 
    var m = moment(inputs[i], ['M/D/YYYY', 'MMM D YYYY', 'YYYY/M/D HH:mm']); 
 
    console.log(m.format(), m.valueOf()); 
 
}
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>

モーメントは、シンプルな経験則を使用して、使用するフォーマットを決定します。順序:

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

01/02/2016曖昧入力は常にJanuary 2nd 2016として解析されるであろう。

関連する問題