## Date

#### formatDuration

Returns the human readable format of the given number of milliseconds.

Divide `ms` with the appropriate values to obtain the appropriate values for `day`, `hour`, `minute`, `second` and `millisecond`. Use `Object.entries()` with `Array.filter()` to keep only non-zero values. Use `Array.map()` to create the string for each value, pluralizing appropriately. Use `String.join(', ')` to combine the values into a string.

    const formatDuration = ms => {
      if (ms < 0) ms = -ms;
      const time = {
        day: Math.floor(ms / 86400000),
        hour: Math.floor(ms / 3600000) % 24,
        minute: Math.floor(ms / 60000) % 60,
        second: Math.floor(ms / 1000) % 60,
        millisecond: Math.floor(ms) % 1000
      };
      return Object.entries(time)
        .filter(val => val[1] !== 0)
        .map(([key, val]) => `${val} ${key}${val !== 1 ? 's' : ''}`)
        .join(', ');
    };

examples

    formatDuration(1001); // '1 second, 1 millisecond'
    formatDuration(34325055574); // '397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds'

#### getColonTimeFromDate

Returns a string of the form `HH:MM:SS` from a `Date` object.

Use `Date.toString()` and `String.slice()` to get the `HH:MM:SS` part of a given `Date` object.

    const getColonTimeFromDate = date => date.toTimeString().slice(0, 8);

examples

    getColonTimeFromDate(new Date()); // "08:38:00"

#### getDaysDiffBetweenDates

Returns the difference (in days) between two dates.

Calculate the difference (in days) between two `Date` objects.

    const getDaysDiffBetweenDates = (dateInitial, dateFinal) =>
      (dateFinal - dateInitial) / (1000 * 3600 * 24);

examples

    getDaysDiffBetweenDates(new Date('2017-12-13'), new Date('2017-12-22')); // 9

#### getMeridiemSuffixOfInteger

Converts an integer to a suffixed string, adding `am` or `pm` based on its value.

Use the modulo operator (`%`) and conditional checks to transform an integer to a stringified 12-hour format with meridiem suffix.

    const getMeridiemSuffixOfInteger = num =>
      num === 0 || num === 24
        ? 12 + 'am'
        : num === 12
          ? 12 + 'pm'
          : num < 12
            ? (num % 12) + 'am'
            : (num % 12) + 'pm';

examples

    getMeridiemSuffixOfInteger(0); // "12am"
    getMeridiemSuffixOfInteger(11); // "11am"
    getMeridiemSuffixOfInteger(13); // "1pm"
    getMeridiemSuffixOfInteger(25); // "1pm"

#### tomorrow

Results in a string representation of tomorrow's date. Use `new Date()` to get today's date, adding one day using `Date.getDate()` and `Date.setDate()`, and converting the Date object to a string.

    const tomorrow = (long = false) => {
      let t = new Date();
      t.setDate(t.getDate() + 1);
      const ret = `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
        t.getDate()
      ).padStart(2, '0')}`;
      return !long ? ret : `${ret}T00:00:00`;
    };

examples

    tomorrow(); // 2017-12-27 (if current date is 2017-12-26)
    tomorrow(true); // 2017-12-27T00:00:00 (if current date is 2017-12-26)