1

I have two kinds of formats

  1. May 16, 12:00 PM-May 17, 12:00 AM

  2. May 16, 12:00 PM-1:00 PM.

I want to know the number of hours between two times. I used the moment to calculate for Option 2 with the following code

Eg: May 16, 12:00 PM-1:30 PM will return 1.5 hours

let dateTime = availablity.split(',');
let dateTimes = availablity.split('-');
let times = dateTime[1].split('-');
var start = moment(times[0], 'hh:mm a');
var end = moment(times[1], 'hh:mm a');
var startTime = moment(start);
var endTime = moment(end);
var x = moment.duration(endTime.diff(startTime));
var tempTime = moment.duration(x);
var hours = tempTime.as('hours');     

How can I use the similar code to achieve number of hours for 1 format as time has for next day

xdeepakv
  • 7,835
  • 2
  • 22
  • 32
user521024
  • 521
  • 2
  • 7
  • 29
  • Does this answer your question? [Check time difference in Javascript](https://stackoverflow.com/questions/1787939/check-time-difference-in-javascript) – Joundill May 17 '20 at 05:41
  • Or this one, since you're using momentjs? [Get the time difference between two datetimes](https://stackoverflow.com/questions/18623783/get-the-time-difference-between-two-datetimes) – Joundill May 17 '20 at 05:43

2 Answers2

2

Try to format the input dates using moment's constructor. The use asHours() to get the number of hours difference between the two dates;

function calculateHours(start, end) {
  var tStart = moment(start, "MMMM DD, h:mm:ss a");
  var tEnd = moment(end, "MMMM DD, h:mm:ss a");
  console.log(moment.duration(tEnd.diff(tStart)).asHours());
}

calculateHours("May 16, 12:00 PM", "May 16, 1:30 PM");
calculateHours("May 16, 12:00 PM", "May 17, 12:00 AM");
calculateHours("May 16, 12:00 PM", "May 16, 1:00 PM");
<script src="https://momentjs.com/downloads/moment.js"></script>
joy08
  • 9,004
  • 8
  • 38
  • 73
0

Here is one without moment

I went via HH:MM, you can incorporate this if you want to skip it for large lists

// https://stackoverflow.com/a/35890816/295783
Number.prototype.toTime = function(isSec) { let ms = isSec ? this * 1e3 : this, lm = ~(4 * !!isSec), fmt = new Date(ms).toISOString().slice(11, lm); if (ms >= 8.64e7) {  let parts = fmt.split(/:(?=\d{2}:)/); parts[0] -= -24 * (ms / 8.64e7 | 0); return parts.join(':'); } return fmt; };

String.prototype.toTimeDecimal = function() { let arr = this.split(':'); let dec = parseInt((arr[1]/6)*10, 10); return Number(arr[0] + '.' + (dec<10?'0':'') + dec); };   


const yyyy = new Date().getFullYear();

const dateTimes = `May 16, 12:00 PM-May 17, 12:00 AM
May 16, 12:00 PM-1:30 PM 
May 16, 12:00 PM-1:00 PM`

const diffs = dateTimes.split("\n").map(times => {
  let parts = times.split("-");
  if (parts[1].length<10) parts[1] = parts[0].split(",")[0]+", "+parts[1];
  parts = parts.map(part => new Date(part.replace(/,/g,", "+yyyy)))
  return (parts[1]-parts[0]).toTime().slice(0,-7)
})
console.log(diffs)
diffs.forEach(diff => console.log(diff.toTimeDecimal()))
mplungjan
  • 169,008
  • 28
  • 173
  • 236