真的不确定我在哪里出错了。
我有一些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
有谁知道为什么会这样?这让我很难过。
答案 0 :(得分:3)
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来简化操作。