Moment

by evgkch

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.js"></script>

JavaScript

const interval = {
	HOURS:  { key: 'hours',  extension: 'hour',  converter: 'DD MMM HH:mm' },
  DAYS:   { key: 'days',   extension: 'day',   converter: 'DD.MM.YY' },
  MONTHS: { key: 'months', extension: 'month', converter: 'MM.YYYY' },
  YEARS:  { key: 'years',  extension: 'year',  converter: 'YYYY' },
};

class Moment {
  /**
   * Parse date to UTC format
   * @param  {string} date
   * @return {string}
   */
  static dateToUTC(date = new Date()) {
    return moment(date).utc();
  }

  /**
   * Return start of date
   * @param  {string} [extension=interval.DAYS.extension]
   * @return {string}
   */
  static startOf(extension = interval.DAYS.extension) {
    return moment().utc().startOf(extension).format();
  }

  /**
   * Return end of date
   * @param  {string} [extension=interval.DAYS.extension]
   * @return {string}
   */
  static endOf(extension = interval.DAYS.extension) {
    return moment().utc().startOf(extension).format();
  }

  /**
   * Create date interval array from start date to end date
   * @param  {string} startDate
   * @param  {string} endDate
   * @param  {Object} [interval={key:'days',converter:'DD.MM.YY'}]
   * @return {string[]}
   */
  static createInterval(startDate, endDate, interval = { key: 'days', converter: 'DD.MM.YY' }) {
    const now = this.dateToUTC(startDate),
          end = this.dateToUTC(endDate),
          buffer = [];
    while (now.isSameOrBefore(end, interval.converter)) {
      buffer.push(now.format(interval.converter));
      now.add(1, interval.key);
    };
    return buffer;
  }

}

console.log(Moment.startOf('day'))