我有一个数组数组,第一个字段是日期(字符串格式)。我想按日期(上升)对它们进行排序,因此我可以将它用于进一步的计算。
我确定了我的问题的两个任务。首先,将字符串解析为日期,然后排序。
a = new Date(Date.parse('1/11/2014 13:42:54'));
console.log(a)
返回11th of January
,而我需要1st of November
然后,我的排序应该是这样的:
function compare(a,b) {
if (a[0] < b[0])
return -1;
if (a[0] > b[0])
return 1;
return 0;
}
myarray.sort(compare);
那么,我怎样才能解决日期问题,使其适用于排序功能?
答案 0 :(得分:1)
如果您的日期是ISO格式,您可以使用以下代码:
myarray.sort(function (a, b) {
return (new Date(a[0])).getTime() - (new Date(b[0])).getTime();
});
答案 1 :(得分:1)
只需抓住日期和月份部分,交换它们并执行Date.parse
和new Date
,就像这样
function getFormattedDate(dateString) {
var result = dateString.replace(/(\d+)\/(\d+)(.*)/, function (m, g1, g2, g3) {
return g2 + "/" + g1 + g3;
});
return new Date(Date.parse(result));
}
console.log(getFormattedDate('1/11/2014 13:42:54'));
// Sat Nov 01 2014 13:42:54 GMT+0000 (GMT)
此处,正则表达式(\d+)\/(\d+)(.*)
将捕获字符串的三个部分,第一个(\d+)
捕获日期部分,后跟/
(转义为\/
)和月份部分与另一个(\d+)
,其余字符串由(.*)
捕获。然后我们通过交换g2
和g1
(月份和日期部分)的位置返回一个新字符串。
注意:如果你要做的只是排序,那么你不需要创建一个新的Date
对象。你可以简单地使用Date.parse
的结果,这是一个纪元时间,就像这个
function getEpochTime(dateString) {
var result = dateString.replace(/(\d+)\/(\d+)(.*)/, function (m, g1, g2, g3) {
return g2 + "/" + g1 + g3;
});
return Date.parse(result);
}
function comparator(firstDate, secondDate) {
return getEpochTime(firstDate) - getEpochTime(secondDate);
}
然后像这样排序
var arr = ['3/11/2014 13:42:54',
'2/11/2014 13:42:54',
'1/12/2014 13:42:54',
'1/11/2014 13:43:54'
];
arr.sort(comparator);
console.log(arr);
会给你
[ '1/11/2014 13:43:54',
'2/11/2014 13:42:54',
'3/11/2014 13:42:54',
'1/12/2014 13:42:54' ]
答案 2 :(得分:1)
使用moment.js,您可以使用String+Format constructor
创建一个时刻对象moment('1/11/2014 13:42:54', 'DD/MM/YYYY HH:mm:ss')
所以,如果你有一个数组数组,第一个字段是一个日期(字符串格式):
array_of_arrays = [
['1/11/2014 13:42:54', 'val'],
['2/11/2014 13:42:54', true]
];
for(array in array_of_arrays){
epoch = moment(array.shift,'DD/MM/YYYY HH:mm:ss').unix();
array.unshift(epoch);
}
现在,您可以只执行new Date(epoch)
而不是复杂的日期对象,我们有Unix Epoch,可以使用inbuid Array.sort轻松地进行排序
function Comparator(a,b){
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
return 0;
}
array_of_arrays.sort(Comparator);
所以现在你根据日期排序array_of_arrays
最后,如果您需要更精确的答案,请分享更多示例代码。
答案 3 :(得分:0)
这是问题:
a = new Date(Date.parse('1/11/2014 13:42:54'));
console.log(a)
1月11日返回,而我需要11月1日。
您的日期格式为dd/mm/yyy
; Date.parse('1/11/2014 13:42:54')
接受mm/dd/yyyy
尝试按如下方式解析日期:
function parseDate(str) {
var ds = str.match(/(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+):(\d+)/);
// Convert to format: mm/dd/yyyy
return new Date(ds[3], ds[2] - 1, // month is 0-based
ds[1], ds[4], ds[5], ds[6]);
}
var arr = [parseDate('3/11/2014 13:42:54'),
parseDate('2/11/2014 13:42:54'),
parseDate('1/12/2014 13:42:54'),
parseDate('1/11/2014 13:43:54')
];
arr.sort();
或者:
function parseDate(str) {
var ds = str.match(/(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+):(\d+)/);
// Convert to format: mm/dd/yyyy
return new Date(ds[3], ds[2] - 1, // month is 0-based
ds[1], ds[4], ds[5], ds[6]);
}
var arr = ['3/11/2014 13:42:54',
'2/11/2014 13:42:54',
'1/12/2014 13:42:54',
'1/11/2014 13:43:54'
];
arr.sort(function(a, b) {
return parseDate(a) - parseDate(b);
})