2017-12-05 2 views
0

어디서 잘못 가고 있는지 확실하지 않습니다. 이 될 이유가끔 javascript 날짜 함수에서 잘못된 날짜가 표시됩니다.

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 

사람이 알고 있나요 : 잘못된 날짜와 콘솔 출력의 일부를 여기에 지금

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 
    }); 
} 

입니다 :

나는 날짜 값으로 테이블을 정렬하는 몇 가지 자바 스크립트를 사고? 그것은 나를 곤란하게 만든다.

+6

'5/09/2017'이 '2010 년 5 월 9 일'으로 구문 분석되면 '28/11/2017'은 (는) 어떻게 해석 되나요? ;) –

+0

날짜가 엄격한 형식이 아니라면 JavaScript 환경에 의존하여 날짜를 일관성있게 구문 분석 할 수 없습니다. 가장 안전한 방법은 자신의 명시적인 형식을 사용하여 Moment와 같은 것을 사용하여 날짜 문자열을 구문 분석하는 것입니다. – Pointy

+1

@le_m 오 좋은 주인, 왜 내가 저쪽에 있는지 보지 못했다. 나는 그 시절을 보내고있는 것 같아. 내 날짜 형식을'dd/MM/yy'에서'MM/dd/yyyy'로 변경하면 트릭이 완료됩니다. 감사합니다 :) –

답변

2

Date.parseRFC 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

예. 시험 할 때 예 : –

관련 문제