Moment.js - two dates difference in number of days

后端 未结 6 2117
不知归路
不知归路 2020-12-03 06:14

I get incorrect results when trying to find numeric difference between two dates:

var startDate = moment( $(\'[name=\"date-start\"]\').val(), \"DD.MM.YYYY\")         


        
相关标签:
6条回答
  • 2020-12-03 06:53
    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)
    }
    
    0 讨论(0)
  • 2020-12-03 07:01

    Here's how you can get the comprehensive full fledge difference of two dates.

     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};
    }
    
    0 讨论(0)
  • 2020-12-03 07:08

    $('#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>

    0 讨论(0)
  • 2020-12-03 07:11

    $('#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>

    0 讨论(0)
  • 2020-12-03 07:15

    the diff method returns the difference in milliseconds. Instantiating moment(diff) isn't meaningful.

    You can define a variable :

    var dayInMilliseconds = 1000 * 60 * 60 * 24;
    

    and then use it like so :

    diff / dayInMilliseconds // --> 15
    

    Edit

    actually, this is built into the diff method, dubes' answer is better

    0 讨论(0)
  • 2020-12-03 07:16

    From the moment.js docs: format('E') stands for day of week. thus your diff is being computed on which day of the week, which has to be between 1 and 7.

    From the moment.js docs again, here is what they suggest:

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

    Here is a JSFiddle for your particular case:

    $('#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>

    0 讨论(0)
提交回复
热议问题