neilbmclaughlin / moment-opening-times

A small class to determine the status of a given moment in relation to a set of opening times
6 stars 6 forks source link
c2s moment npm

moment-opening-times

GitHub Release npm version Greenkeeper badge Build Status Coverage Status

Given a set of opening times (with optional alternative opening times) return a status indicating openness.

Installation

To install the package run:

This package relies upon several other packages. These are the Peer Dependencies. To get a list of the peerDependencies run the following command:

npm info moment-opening-times peerDependencies

All peerDependencies need to be installed.

Usage

The class is instantiated with 3 arguments. The third argument is optional and represents a set of opening times classified as alterations. Once instantiated the function getStatus is passed the current time and an optional options object. Currently the only valid option is a boolean field - next. When next set to a truthy value the returned object will contain 2 additional fields, nextClosed and nextOpen. Both fields are a moment with a time zone indicating the next time the place is closed and open, respectively.

Example usage

Given the open hours of a place is represented by the following set of opening times:

const openingTimes =
{
  sunday:    [ { opens: '09:00', closes: '17:30' } ],
  monday:    [ { opens: '08:00', closes: '11:00' }, { opens: '13:00', closes: '15:00' }, { opens: '17:00', closes: '19:00' } ],
  tuesday:   [ { opens: '09:00', closes: '17:30' } ],
  wednesday: [ { opens: '09:00', closes: '12:00' }, { opens: '14:00', closes: '18:00' } ],
  thursday:  [ { opens: '09:00', closes: '17:00' }, { opens: '18:00', closes: '21:00' } ],
  friday:    [ { opens: '09:00', closes: '17:30' } ],
  saturday:  [ { opens: '09:00', closes: '17:30' } ],
}

In order to find out if the place is open now in the Europe/London time zone the following code can be used:

const moment = require('moment');
const OpeningTimes = require('moment-opening-times');

const now = moment();
const openingTimesMoment = new OpeningTimes(openingTimes, 'Europe/London');

const status = openingTimesMoment.getStatus(now);

If we wanted to know whether the place was open at 23:59:59 on 31/12/2020 in Indian/Christmas the code would be:

const moment = require('moment');
const OpeningTimes = require('moment-opening-times');

const dateToCheck = moment('2020-12-31 23:59:59');
const openingTimesMoment = new OpeningTimes(openingTimes, 'Indian/Christmas');

const status = openingTimesMoment.getStatus(dateToCheck);

For more detailed use cases, check out the test suite.