Mah*_*Lee 8 javascript arrays sorting date
我有一个格式为MM/DD/YYYY的日期数组.我需要从今天开始找到未来的最近日期.今天说是2016年1月22日,然后2016年2月19日将返回.
2/3/2015
7/5/2015
1/21/2016
2/19/2016
7/1/2016
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用子串将月,日,年分开并尝试基于这些值的排序,但肯定必须有更好的方法.
Fre*_*k.L 11
不需要排序算法.您只需迭代一次,找到最接近或等于今天的日期.
伪代码
closest <- infinity
foreach date in dates:
if (date >= now and date < closest) then
closest <- d
return closest
Run Code Online (Sandbox Code Playgroud)
JavaScript的
const dates = [
'2/3/2015',
'7/5/2015',
'1/21/2016',
'2/19/2016',
'7/1/2016',
'10/22/2019',
'08/12/2019',
];
const now = new Date();
let closest = Infinity;
dates.forEach(function(d) {
const date = new Date(d);
if (date >= now && (date < new Date(closest) || date < closest)) {
closest = d;
}
});
console.log(closest);Run Code Online (Sandbox Code Playgroud)
我个人将使用一个非常好的Moment.JS库之类的库来处理所有可怕的日期复杂性。
它有一个不同的方法:
http://momentjs.com/docs/#/displaying/difference/
例如
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b) // 86400000
Run Code Online (Sandbox Code Playgroud)
这样,Math.min()列表中每个日期的差异就变得微不足道了。
还有一个moment.min,如果您的所有日期已经在将来,则可能会完全缩短此时间:
http://momentjs.com/docs/#/get-set/min/