以MM/DD/YYY格式JavaScript查找下一个最接近的日期

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)


sci*_*lot 5

我个人将使用一个非常好的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/