Moment.js - 两天的天数差异

时间:2016-04-13 13:57:08

标签: javascript momentjs

尝试查找两个日期之间的数字差异时,我得到的结果不正确:

var startDate = moment( $('[name="date-start"]').val(), "DD.MM.YYYY"), // $('[name="date-start"]').val() === "13.04.2016"
endDate       = moment( $('[name="date-end"]'  ).val(), "DD.MM.YYYY"); // $('[name="date-end"]').val() === "28.04.2016"

var diff = startDate.diff(endDate);

console.log( moment(diff).format('E') );

13.04.201628.04.2016之间,我不应该 3 2 天......

我尝试了多种组合:

  • startDate.diff(endDate)
  • 交换endDate.diff(startDate)
  • format('E')我正在搜索SO

结果:我得到这种差异的所有时间都是3天或2天。

我做错了什么?提前谢谢。

6 个答案:

答案 0 :(得分:59)

从那时开始。docsformat('E')代表星期几。因此你的差异计算在一周的哪一天,必须在1到7之间。

从the moment.js文档再次,这是他们的建议:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1

这是针对您的特定情况的JSFiddle:



$('#test').click(function() {
  var startDate = moment("13.04.2016", "DD.MM.YYYY");
  var endDate = moment("28.04.2016", "DD.MM.YYYY");

  var result = 'Diff: ' + endDate.diff(startDate, 'days');

  $('#result').html(result);
});

#test {
  width: 100px;
  height: 100px;
  background: #ffb;
  padding: 10px;
  border: 2px solid #999;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.js"></script>

<div id='test'>Click Me!!!</div>
<div id='result'></div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

diff方法返回以毫秒为单位的差异。实例化moment(diff)并没有意义。

您可以定义变量:

var dayInMilliseconds = 1000 * 60 * 60 * 24;

然后像这样使用它:

diff / dayInMilliseconds // --> 15

修改

实际上,这是内置于diff方法,dubes&#39;答案更好

答案 2 :(得分:0)

在这里,您可以获取两个日期的全面完整的绒毛差异。

 function diffYMDHMS(date1, date2) {

    let years = date1.diff(date2, 'year');
    date2.add(years, 'years');

    let months = date1.diff(date2, 'months');
    date2.add(months, 'months');

    let days = date1.diff(date2, 'days');
    date2.add(days, 'days');

    let hours = date1.diff(date2, 'hours');
    date2.add(hours, 'hours');

    let minutes = date1.diff(date2, 'minutes');
    date2.add(minutes, 'minutes');

    let seconds = date1.diff(date2, 'seconds');

    console.log(years + ' years ' + months + ' months ' + days + ' days ' + hours + ' 
    hours ' + minutes + ' minutes ' + seconds + ' seconds'); 

    return { years, months, days, hours, minutes, seconds};
}

答案 3 :(得分:0)

$('#test').click(function() {
  var startDate = moment("01.01.2019", "DD.MM.YYYY");
  var endDate = moment("01.02.2019", "DD.MM.YYYY");

  var result = 'Diff: ' + endDate.diff(startDate, 'days');

  $('#result').html(result);
});
#test {
  width: 100px;
  height: 100px;
  background: #ffb;
  padding: 10px;
  border: 2px solid #999;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.js"></script>

<div id='test'>Click Me!!!</div>
<div id='result'></div>

答案 4 :(得分:0)

$('#test').click(function() {
  var todayDate = moment("01.01.2019", "DD.MM.YYYY");
  var endDate = moment("08.02.2019", "DD.MM.YYYY");

  var result = 'Diff: ' + todayDate.diff(endDate, 'days');

  $('#result').html(result);
});
#test {
  width: 100px;
  height: 100px;
  background: #ffb;
  padding: 10px;
  border: 2px solid #999;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.js"></script>

<div id='test'>Click Me!!!</div>
<div id='result'></div>

答案 5 :(得分:0)

const FindDate = (date, allDate) => {
        
    // moment().diff only works on moment(). Make sure both date and elements in allDate array are in moment format
    let nearestDate = -1; 
    
    allDate.some(d => {
        const currentDate = moment(d)
        const difference = currentDate.diff(d); // Or d.diff(date) depending on what you're trying to find
        if(difference >= 0){
            nearestDate = d
        }
    });
    
    console.log(nearestDate)
}