0

This is my code for getting days difference from given dates. I need the days accurately, Here my correct days different is '2' but i am getting 1. i am using moment.js for this operation in angular. This is not taking time . I need time to take for getting result. I am using this code in calendar so i need to take time too.

var startdate=new Date('2017-12-30 06:00:00');
var enddate=new Date('2018-01-01 01:00:00');

var diff=  moment(enddate).diff(startdate, "days");
console.log(diff)
Balu
  • 484
  • 1
  • 5
  • 19
  • Possible duplicate of [Get hours difference between two dates in Moment Js](https://stackoverflow.com/questions/25150570/get-hours-difference-between-two-dates-in-moment-js) – Harshil Dec 27 '17 at 10:26
  • Do you want to ignore the time? – Hassan Imam Dec 27 '17 at 10:40
  • @HassanImam Ino i need to add time . Consider as next day, here one hour will increase on next day here we consider as a next day. – Balu Dec 27 '17 at 15:30

4 Answers4

2

Try using startOf, to remove time part of both dates.

moment(enddate).startOf('day').diff(moment(startdate).startOf('day'), 'days');
Soulbe
  • 444
  • 8
  • 14
1

Try this vanilla JS solution

var numberOfDays = Math.ceil( ( enddate.getTime() - startdate.getTime() ) 
                     / ( 1000*60*60*24 ));

Demo

var startdate=new Date('2017-12-30 06:00:00');
var enddate=new Date('2018-01-01 01:00:00');
var numberOfDays = Math.ceil( ( enddate.getTime() - startdate.getTime() ) 
                     / ( 1000*60*60*24 ));
console.log( numberOfDays );
gurvinder372
  • 66,980
  • 10
  • 72
  • 94
1

Difference 1.0.0+

...
By default, moment#diff will truncate the result to zero decimal places, returning an integer. If you want a floating point number, pass true as the third argument. Before 2.0.0, moment#diff returned a number rounded to the nearest integer, not a truncated number.

var startdate = new Date('2017-12-30 06:00:00');
var enddate = new Date('2018-01-01 01:00:00');

var diff = moment(enddate).diff(startdate, "days", true);

console.log(diff);            // 1.7916666666666667
console.log(Math.ceil(diff)); // 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
Andreas
  • 21,535
  • 7
  • 47
  • 56
0

var startdate=new Date('2017-12-30 06:00:00');
var enddate=new Date('2018-01-01 01:00:00');
console.log( moment(enddate).diff(startdate, 'days'))
console.log( moment(enddate).diff(startdate, 'weeks'))
console.log( moment(enddate).diff(startdate, 'hours')) 
console.log( moment(enddate).diff(startdate, 'minutes'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
vicky patel
  • 699
  • 2
  • 8
  • 14
  • TO is already using `.diff(..., 'days')`, but _"Here my correct days different is '2' but i am getting 1"_ – Andreas Dec 27 '17 at 12:38