Suy*_*ant 10 javascript jquery datetime bootstrap-datepicker
我想按升序对数组进行排序.日期是字符串格式
["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"]
Run Code Online (Sandbox Code Playgroud)
甚至需要一个函数来检查这些日期是否是连续的形式:
eg - Valid - ["09/06/2015", "10/06/2015", "11/06/2015"]
Invalid - ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015"]
Run Code Online (Sandbox Code Playgroud)
示例代码:
function sequentialDates(dates){
var temp_date_array = [];
$.each(dates, function( index, date ) {
//var date_flag = Date.parse(date);
temp_date_array.push(date);
});
console.log(temp_date_array);
var last;
for (var i = 0, l = temp_date_array.length; i < l; i++) {
var cur = new Date();
cur.setTime(temp_date_array[i]);
last = last || cur;
//console.log(last+' '+cur);
if (isNewSequence(cur, last)) {
console.log("Not Sequence");
}
}
//return dates;
}
function isNewSequence(a, b) {
if (a - b > (24 * 60 * 60 * 1000))
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*rto 24
无需将字符串转换为日期或使用RegExp.
简单的解决方案是使用Array.sort()方法.sort函数将日期格式设置为YYYYMMDD,然后比较字符串值.假设日期输入格式为DD/MM/YYYY.
data.sort(function(a,b) {
a = a.split('/').reverse().join('');
b = b.split('/').reverse().join('');
return a > b ? 1 : a < b ? -1 : 0;
// return a.localeCompare(b); // <-- alternative
});
Run Code Online (Sandbox Code Playgroud)
更新:
建议使用一个有用的注释localeCompare()
来简化排序功能.上面的代码片段中显示了此替代方法.
运行Snippet进行测试
<!doctype html>
<html>
<body style="font-family: monospace">
<ol id="stdout"></ol>
<script>
var data = ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"];
data.sort(function(a,b) {
a = a.split('/').reverse().join('');
b = b.split('/').reverse().join('');
return a > b ? 1 : a < b ? -1 : 0;
// return a.localeCompare(b); // <-- alternative
});
for(var i=0; i<data.length; i++)
stdout.innerHTML += '<li>' + data[i];
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果要对它们进行排序,则需要将字符串转换为日期,并比较这些日期。您可以利用该sort
方法接受的参数,以实现此目的:
var dateStrings = ["09/06/2015", "25/06/2015", "22/06/2015", "25/07/2015", "18/05/2015"];
var sortedStrings = dateStrings.sort(function(a,b) {
var aComps = a.split("/");
var bComps = b.split("/");
var aDate = new Date(aComps[2], aComps[1], aComps[0]);
var bDate = new Date(bComps[2], bComps[1], bComps[0]);
return aDate.getTime() - bDate.getTime();
});
Run Code Online (Sandbox Code Playgroud)
为了减少代码冗余并处理不同的日期格式,您可以添加一个额外的函数来创建sort
方法所需的比较器:
function createSorter(dateParser) {
return function(a, b) {
var aDate = dateParser(a);
var bDate = dateParser(b);
return aDate.getTime() - bDate.getTime();
};
}
dateStrings.sort(createSorter(function(dateString) {
var comps = dateString.split("/");
return new Date(comps[2], comps[1], comps[0]);
}));
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过将不同的函数传递给createSorter
调用来使用不同的日期格式化程序。
至于你的第二个问题,你可以从你的字符串创建一个(排序的)日期数组,并在该数组上执行你的逻辑:
function myDateParser(dateString) {
var comps = dateString.split("/");
return new Date(comps[2], comps[1], comps[0]);
}
var sortedDates = dateStrings.map(myDateParser).sort();
Run Code Online (Sandbox Code Playgroud)
您可以遍历sortedDates
数组,如果您找到两个不连续的日期,那么您的日期之间存在间隔。
归档时间: |
|
查看次数: |
23810 次 |
最近记录: |