Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Given 2 dates e.g. January 15, 2019 and February 28, 2019
  2. // Return the number of days in between e.g. 44 for above
  3.  
  4. function days(date1, date2) {
  5.     const months = {"January":1, "February":2, "March":3, "April":4, "May":5, "June": 6,
  6.                     "July":7, "August":8, "September":9, "October":10, "November":11, "December": 12};
  7.     const daysInMonth = [];
  8.     function initializeDaysInMonth() {
  9.         for (let i = 1; i <= 12; i++) {
  10.             if (i === 2) { daysInMonth[i] = 28; }
  11.             else if ((i <= 7 && (i % 2 === 0)) || (i > 7 && !(i % 2 === 0))) { daysInMonth[i] = 30; }
  12.             else { daysInMonth[i] = 31; }
  13.         }
  14.     }
  15.     function parseDate(date) {
  16.         const parsed = date.split(" ");
  17.         parsed[0] = months[parsed[0]];
  18.         parsed[1] = parseInt(parsed[1].substring(0, parsed[1].length - 1), 10);
  19.         parsed[2] = parseInt(parsed[2], 10);
  20.         return parsed;
  21.     }
  22.     function earlierDate(date1, date2) {
  23.         return date1[2] < date2[2] ? 1
  24.              : date1[2] > date2[2] ? 2
  25.                 : date1[0] < date2[0] ? 1
  26.                 : date1[0] > date2[0] ? 2
  27.                     : date1[1] < date2[1] ? 1
  28.                     : 2;
  29.     }
  30.     function yearDiff(date1, date2) {
  31.         const diff = date2[2] - date1[2];
  32.         const diffDays = diff * 365;
  33.         return diffDays + Math.floor(diff / 4);
  34.     }
  35.     function monthDiff(date1, date2) {
  36.         let diff = 0;
  37.         for (let m = date1[0]; m !== date2[0]; m += date1[0] < date2[0] ? 1 : -1) {
  38.             const mDays = daysInMonth[m];
  39.             diff += date1[0] < date2[0] ? mDays : -mDays;
  40.         }
  41.         return diff;
  42.     }
  43.     function dayDiff(date1, date2) {
  44.         return date2[1] - date1[1];
  45.     }
  46.     const parsed1 = parseDate(date1);
  47.     const parsed2 = parseDate(date2);
  48.     if (earlierDate(parsed1, parsed2) === 2) {
  49.         return days(date2, date1);
  50.     } else {
  51.         initializeDaysInMonth();
  52.         return yearDiff(parsed1, parsed2) +
  53.                monthDiff(parsed1, parsed2) +
  54.                dayDiff(parsed1, parsed2);
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement