如何在不使用年份的情况下比较Javascript中的日期?

时间:2015-08-06 14:35:05

标签: javascript

标题说明了一切。我在其他领域使用MomentJS,所以我对使用时刻的解决方案感到满意(或者不是 - 无论哪种方式都很好)。在此解决方案中,函数将返回到比较日期的最短路径。例如比较12-31到01-01将返回1,而不是364.基本上这就是我要做的事情:

var today = '08-06'; // august 6th 
var dateOne = '09-03' // september 3rd
var dateTwo = '02-29' // february 29th
var dateThree = '01-01' // january 1st

getDifferenceInDays(today, dateOne); // => 28
getDifferenceInDays(today, dateTwo); // => -159
getDifferenceInDays(today, dateThree); // => 147

2 个答案:

答案 0 :(得分:1)

通过从Date对象获取月中的月份和日期,您应该可以使用MomentJS轻松完成此操作。

var getDifferenceInDays = function(date1, date2) {
  var day1 = date1.dayOfYear();
  var day2 = date2.dayOfYear();

  if (Math.abs(day1 - day2) < (365 - Math.abs(day2 - day1))) {
    return Math.abs(day1 - day2);
  } else {
    return (365 - Math.abs(day1 - day2));
  }
}

片刻&#34; dayOfYear()&#34;函数返回一年中的某一天(1到366之间的数字)。希望这有帮助!

答案 1 :(得分:1)

这适用于MomentJS。需要注意的是,当您初始化MomentJS日期时,它会隐含地将年份添加到今年。因此,假设这些值是为今年计算的

function getDifferenceInDays(date1, date2) {
  var day1 = moment(date1,'MM-DD').dayOfYear();
  var day2 = moment(date2,'MM-DD').dayOfYear();
  var diff1=(day2 - day1)
  var diff2=365- Math.abs(diff1)
  if (Math.abs(diff1)>Math.abs(diff2)) {
     return diff2;
  } else {
     return diff1;
  }
}

var today = '08-06'; // august 6th 
var dateOne = '09-03' // september 3rd
var dateTwo = '02-29' // february 29th
var dateThree = '01-01' // january 1st
console.log(";;;;")
console.log(getDifferenceInDays(today, dateOne)); // => 28
console.log(getDifferenceInDays(today, dateTwo)); // => -159
console.log(getDifferenceInDays(today, dateThree)); // => 147

http://jsfiddle.net/r2brgf4r/