2017-12-05 12 views
0

ここで間違っているのは本当にわかりません。JavaScriptの日付関数から無効な日付が表示されることがあります

私は日付値でテーブルをソートするためにいくつかのJavaScriptを持っている:今ここ

function sortByDate() { 
    if (jQuery("#web-orders .data-table tbody").length > 0) { 
     var tbody = document.querySelector("#web-orders .data-table tbody"); 
     var rows = [].slice.call(tbody.querySelectorAll("tr")); 
    } 
    if (jQuery("#store-orders .data-table tbody").length > 0) { 
     var tbodyStore = document.querySelector("#store-orders .data-table tbody"); 
     var rowsStore = [].slice.call(tbodyStore.querySelectorAll("tr")); 

     rowsStore.forEach(function (entry) { 
      rows.push(entry); 
     }); 
    } 

    rows.sort(function (a, b) { 
     console.log("a.cells[2].innerHTML = " + a.cells[2].innerHTML); 
     console.log("b.cells[2].innerHTML = " + b.cells[2].innerHTML); 

     a = new Date(Date.parse(a.cells[2].innerHTML)); 
     b = new Date(Date.parse(b.cells[2].innerHTML)); 

     console.log("a = " + a); 
     console.log("b = " + b); 

     return a - b; 
    }); 

    rows.forEach(function (v) { 
     tbody.appendChild(v); // note that .appendChild() *moves* elements 
    }); 
} 

は、無効な日付とコンソール出力の一部である:これはあるかもしれない理由

a.cells[2].innerHTML = 28/11/2017 1:49:37 PM 
b.cells[2].innerHTML = 5/09/2017 6:27:35 AM 
a = Invalid Date 
b = Tue May 09 2017 06:27:35 GMT+0930 (Cen. Australia Standard Time) 
a.cells[2].innerHTML = 28/11/2017 1:49:37 PM 
b.cells[2].innerHTML = 24/09/2017 6:12:48 PM 
a = Invalid Date 
b = Invalid Date 

誰もが知っていますハプニング?それは私に困ってしまった。

+6

「5/09/2017」が 'May 09 2017'に解析された場合、' 28/11/2017'はどのように解析されますか? ;) –

+0

日付が厳密な形式でない限り、JavaScript環境に依存して一貫性のある日付を解析することはできません。最も安全なことは、あなたの日付文字列を解析するためにあなた自身の明示的なフォーマットでMomentのようなものを使うことです。 – Pointy

+1

@le_mああああ、なぜ私はそれが私を超えているのを見ていない、私は当時のうちの1つを持っていると思います。私の日付形式を 'dd/MM/yy'から' MM/dd/yyyy'に変更しました。ありがとう:) –

答えて

2

Date.parseは、RFC 2822フォーマットを使用し、カスタムフォーマットを指定することはできません。あなたの入力が一貫してDD/MM/YYYY h:m:s AM/PM形式であれば、splitを使用して自分で解析し、手動でDateオブジェクトを作成することができます。

parseDate(a.cells[2].innerHTML); 
parseDate(b.cells[2].innerHTML); 

function parseDate(str) { 
    // Split into date, time, and AM/PM 
    var parts = str.split(" "); 

    // Split and parse the day, month, and year 
    var date = parts[0].split("/"); 
    var day = parseInt(date[0]); 
    var month = parseInt(date[1]) - 1; 
    var year = parseInt(date[2]); 

    // Split and parse the hours, minutes, and seconds 
    var time = parts[1].split(":"); 
    var hour = parseInt(time[0]); 
    var minute = parseInt(time[1]); 
    var second = parseInt(time[2]); 

    // Add 12 hours to the time if it's in the afternoon 
    if (parts[2] == "PM") { hour += 12; } 

    // Build and return our Date object 
    return new Date(year, month, day, hour, minute, second); 
} 

他の人が述べたように、あなたはまた、物事を簡単にするためにMomentを使用することができます。

+0

私はいくつかの余裕を持っているときに私はこの周りで遊ぶでしょう:) –

+0

@WebDevGuyそれはあなたのために働いた場合、それは受け入れられるとマークすることができますか? – vqdave

+0

ええ、私はそれをテストします。 –

関連する問題