有没有更好的智能排序日期的方法?
Is there a better way to intelligently sort dates?
我有一个日期数组,它看起来像这样:
var dates = [
{ day: 14, month: 4 },
{ day: 28, month: 4 },
{ day: 29, month: 11 },
{ day: 2, month: 9 }
];
我想对它们进行排序,从现在是八月的角度来看。我是说,第11个月比第4个月更近。我想了很多,最后想出了这个解决方案。首先,由于连接JSON数组的问题,它实际上不起作用,但这是一个小问题。我认为这是一种非常糟糕的方式,从效率或其他方面来说。你能想出更好的办法吗?谢谢!
您可以查看此JS Bin。其主要思想是获取当前月份,并将数组中的每个月与当前月份相抵消。然后,如果结果是负的,这意味着它是在当前的一个月之后,我试图找出它的顺序是什么。
修改后的代码如下:
Dates.prototype.sort = function() {
var date = new Date();
var currentMonth = date.getMonth() + 1;
for(var j = 0; j < this.arr.length - 1; j++) {
for (var i = 0; i < this.arr.length - 1; i++) {
var month = this.arr[i].month - currentMonth;
var nextMonth = this.arr[i + 1].month - currentMonth;
if(month < 0){
month = 12 + month;
}
if(nextMonth < 0){
nextMonth = 12 + nextMonth;
}
if (month > nextMonth)
this.switch(i, i + 1);
else if (month == nextMonth)
if (this.arr[i].day > this.arr[i + 1].day)
this.switch(i , i + 1);
}
}
};
这不会修改数组或任何原型。这只是在比较每个元素时构建一个日期对象的问题。
var today = new Date(),
current_day = today.getDate(),
current_month = today.getMonth() + 1,
current_year = today.getFullYear(),
comparator = function(d1, d2) {
var y1, y2, date1, date2;
if (d1.month > current_month || (d1.month == current_month && d1.day > current_day)) {
y1 = current_year;
} else {
y1 = current_year + 1;
}
if (d2.month > current_month || (d2.month == current_month && d2.day > current_day)) {
y2 = current_year;
} else {
y2 = current_year + 1;
}
date1 = new Date(y1, d1.month - 1, d1.day);
date2 = new Date(y2, d2.month - 1, d2.day);
return date1.getTime() - date2.getTime();
};
dates.sort(comparator);
根据与当前月份的距离进行排序,可以使用:
Dates.prototype.sort = function() {
var m = new Date().getMonth()+1
,tmparr = this.arr.slice().map( function(v) {
v.distance = Math.abs(+v.month - m); return v;
})
;
this.arr = tmparr.sort( function(a,b) { return a.distance - b.distance; } )
.map( function(v) { delete v.distance; return v; } );
};
见调整后的jsbin
相关文章:
- 在JavaScript中拆分日期字符串的更好方法是什么
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 理解日期对象接收参数时的getDay()方法
- 需要减少用于获取日期格式的javascript方法代码
- JavaScript:获取第一个月前 6 个月的日期的最简单方法
- 如何使用日期方法在javascript中写入页面
- 使用日期.js分析方法,而不是当前日期
- MVC4和日期选择器:“;0x800a01b6-JavaScript运行时错误:对象没有't支持属性或方法
- 从客户端的对象数组中获取最新日期的优雅方法是什么
- Kendo日期选择器值方法没有't引发自己的变革事件
- 在日期范围内查找丢失日期的最有效方法是什么
- 将时间戳转换为人类可读日期的简单方法
- 有没有一种方法可以让jQuery日期选择器在没有年份的情况下工作
- JavaScript 将循环遍历数组的函数传递给使用 Switch 语句日期方法的函数
- 从日期选取器发送日期参数,在方法 GET 上不带“/”
- 通过 jQuery 验证日期字符串格式的最佳方法
- 日/月/年格式的日期的 Jquery 验证方法
- 检查数组中元素的数据类型是否为日期对象的最简单方法
- DatePicker 在完整视图中提供对象不支持属性或方法“日期选择器”,但不支持模态形式的属性或方法
- IE8:对象不;t支持此属性或方法(日期函数)