This library is designed to parse a growing subset of the OpenStreetMap opening hours format, after finding that existing libraries weren't suitable for our needs.
https://wiki.openstreetmap.org/wiki/Key:opening_hours
It was initally developed to represent the most common requirements of venues we were working with, and has been expanded over time.
The first step in using the parser is to parse the OpenStreetMap string into our data format, called a Schedule.
import {parse} from "@candide/opening-hours-parser"
const schedule = parse("Mo-Fr 08:00-12:00,13:00-17:30")
After that, initialise the openingHours factory with the parsed Schedule and any Options that you need to provide.
import {parse, openingHours} from "@candide/opening-hours-parser"
const publicHolidays = [ "2020-08-13" ] // etc... obtain from a reputable source for your region
const schedule = parse("Mo-Fr 08:00-12:00,13:00-17:30")
const {isOpenOn} = openingHours(schedule, {publicHolidays})
isOpenOn(new Date("2020-07-23T12:30")) // returns false
This takes an OpenStreetMap format string and returns a Schedule.
This takes a Schedule and an optional Options object and returns helper functions.
This is a type with the following two properties.
publicHolidays is an optional Array of Strings that represent the public holidays in the region of the venue.
timezone is an optional String that sets the timezone of the venue.
This takes a Date and returns a boolean that represents if the venue is open at exactly that date and time.
This takes a Date and returns a boolean that represents if the venue is, has been, or will be open at any point on that calendar date.
This takes a Date and returns a Date that represents the next time the venue will be open. If it returns the same Date then the venue is open right now.
The OpenStreetMap format explicity uses local dates and times whenever they are defined in the schedule.
This library assumes that all javascript datetimes passed in to our utility functions are in the same timezone as the dates and times in the schedule and the same timezone that the code is running.
If that is not the case, you must pass a timezone to the factory that produces our helper functions.
import {parse, openingHours} from "@candide/opening-hours-parser"
const schedule = parse("Mo-Fr 08:00-12:00,13:00-17:30")
const {isOpenOn} = openingHours(schedule, {timezone: "Europe/Amsterdam"})
isOpenOn(new Date("2020-07-23T12:30:00.000Z")) // returns true since that's 13:30 locally