
Research
/Security News
Shai Hulud Strikes Again (v2)
Another wave of Shai-Hulud campaign has hit npm with more than 500 packages and 700+ versions affected.
@phoenix344/opening-hours
Advanced tools
[](https://app.travis-ci.com/phoenix344/opening-hours)
A plain typescript/ES6+ opening hours library with no external dependencies.
Initialize your class:
import { OpeningHours, WeekDays } from '@phoenix344/opening-hours';
const oh = new OpeningHours({
// Predefine a date makes only sense to test the current day
//currentDate: new Date(2020, 8, 15),
text: {
weekDays: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
closed: 'geschlossen',
timespanSeparator: ' bis '
}
});
Insert opening hours entries:
oh.add(WeekDays.Monday, '08:00', '12:30');
oh.add(WeekDays.Monday, '13:00', '16:00');
oh.add(WeekDays.Tuesday, '08:00', '12:30');
oh.add(WeekDays.Tuesday, '13:00', '16:00');
oh.add(WeekDays.Wednesday, '08:00', '14:00');
oh.add(WeekDays.Thursday, '08:00', '12:30');
oh.add(WeekDays.Thursday, '13:00', '16:00');
oh.add(WeekDays.Friday, '08:00', '12:30');
oh.add(WeekDays.Friday, '13:00', '16:00');
oh.add(WeekDays.Saturday, '10:00', '14:00');
Alternatively you can add a saved JSON output from toJSON():
oh.load([
{ "day": 1, "from": "0800", "until": "1230" },
{ "day": 1, "from": "1300", "until": "1600" },
{ "day": 2, "from": "0800", "until": "1230" },
{ "day": 2, "from": "1300", "until": "1600" },
{ "day": 3, "from": "0800", "until": "1400" },
{ "day": 4, "from": "0800", "until": "1230" },
{ "day": 4, "from": "1300", "until": "1600" },
{ "day": 5, "from": "0800", "until": "1230" },
{ "day": 5, "from": "1300", "until": "1600" },
{ "day": 6, "from": "1000", "until": "1400" }
]);
To display it as plain text use the toString() method:
oh.toString();
The current day will be highlighted in brackets [...]
Mo 08:00 bis 12:30, 13:00 bis 16:00
[Di 08:00 bis 12:30, 13:00 bis 16:00]
Mi 08:00 bis 14:00
Do 08:00 bis 12:30, 13:00 bis 16:00
Fr 08:00 bis 12:30, 13:00 bis 16:00
Sa 10:00 bis 14:00
To use the data to customize your UI you can also use the toLocaleJSON method:
oh.toLocaleJSON();
The output looks like this (the current day is active: true):
[
{
"active": false,
"day": "Mo",
"times": [
{ "from": "08:30", "until": "12:30" },
{ "from": "13:00", "until": "16:00" }
]
},
{
"active": true,
"day": "Di",
"times": [
{ "from": "08:30", "until": "12:30" },
{ "from": "13:00", "until": "16:00" }
]
},
{
"active": false,
"day": "Mi",
"times": [
{ "from": "08:30", "until": "14:00" },
]
},
{
"active": false,
"day": "Do",
"times": [
{ "from": "08:30", "until": "12:30" },
{ "from": "13:00", "until": "16:00" }
]
},
{
"active": false,
"day": "Fr",
"times": [
{ "from": "08:30", "until": "12:30" },
{ "from": "13:00", "until": "16:00" }
]
},
{
"active": false,
"day": "Sa",
"times": [
{ "from": "10:00", "until": "14:00" }
]
},
]
To export and save the opening hours, use the toJSON method:
oh.toJSON();
[
{ "day": 1, "from": "0800", "until": "1230" },
{ "day": 1, "from": "1300", "until": "1600" },
{ "day": 2, "from": "0800", "until": "1230" },
{ "day": 2, "from": "1300", "until": "1600" },
{ "day": 3, "from": "0800", "until": "1400" },
{ "day": 4, "from": "0800", "until": "1230" },
{ "day": 4, "from": "1300", "until": "1600" },
{ "day": 5, "from": "0800", "until": "1230" },
{ "day": 5, "from": "1300", "until": "1600" },
{ "day": 6, "from": "1000", "until": "1400" }
]
oh.toString({ locales: 'zh-CN' });
The output looks like this:
[tue 上午08:00 - 下午12:30, 下午01:00 - 下午04:00]
wed 上午08:00 - 下午02:00
thu 上午08:00 - 下午12:30, 下午01:00 - 下午04:00
fri 上午08:00 - 下午12:30, 下午01:00 - 下午04:00
sat 上午10:00 - 下午02:00
sun closed
mon 上午08:00 - 下午12:30, 下午01:00 - 下午04:00
Interface for every available class option.
| Property | Default | Description |
|---|---|---|
weekStart | WeekDays.Monday | The start of the week can vary in different countries. The default is sunday, but you can set it to any week day. |
currentDate | new Date() | This is the indicator to highlight the opening hours of the current day. |
currentDayOnTop | false | Orders the output list, so the current day is always on top. |
locales | "de-DE" | The language tag that represents how the time will be formatted. In case of internationalization it should be defined by the client (i.e. from |
dateTimeFormatOptions | { timeZone: "Europe/Berlin", hour: "2-digit", minute: "2-digit" } | The DateTimeFormat configures the time at GMT-2 and only displays hours and minutes in 2-digit format. Should be defined by the business owner to avoid confusion with local and remote timezones. |
text | OpeningHoursTranslation | An object of translations for display behavior |
Interface for the output text. In case of internationalization you can add your translations here
| Property | Default | Description |
|---|---|---|
weekDays | ["sun", "mon", "tue", "wed", "thu", "fri", "sat"] | The human readable week days ordered by 0 = Sunday until 6 = Saturday. This will be used in the toString() and toLocaleJSON() output. |
timespanSeparator | " - " | Fills the space between the from and until time in the toString() method. |
closed | "closed" | Fills the empty value of a day with the closed message in toString() method. |
| Method | Parameters | Return | Description |
|---|---|---|---|
constructor | (optional) options?: OpeningHoursOptions | Initializes the class instance | |
getState | (optional) now?: Date | OpenState.Open or OpenState.Closed | Returns if the subject business is currently open or closed |
isOpenSoon | (optional) now?: Date(optional) expireSeconds?: number | boolean | Informs whether the business will be open soon. expireSeconds = 1800 (30min) |
isClosedSoon | (optional) now?: Date(optional) expireSeconds?: number | boolean | Informs whether the business will be closed soon. expireSeconds = 1800 (30min) |
add | day: WeekDays`from: string | number | Date<br>until: string |
load | `json: Array<{ day: WeekDays, from: string | number | Date, until: string |
toString | (optional) options?: OpeningHoursOptions | Example: "mon 08:00 - 12:30, 13:00 - 16:00" | Creates a string output that represents the opening hours |
toLocaleJSON | (optional) options?: OpeningHoursOptions | Example: [{day: string, active: boolean, times: [{day: 1, from: "08:00", until: "12:30"}, {from: "13:00", until: "16:00"}]}] | Creates an output format that can easily be used to format it in the UI. |
toJSON | Example: [{day: 1, from: "0800", until: "1230"}, {day: 1, from: "1300", until: "1600"}] | Creates an object output for JSON and can be reimported into load(json) |
FAQs
[](https://app.travis-ci.com/phoenix344/opening-hours)
We found that @phoenix344/opening-hours demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Another wave of Shai-Hulud campaign has hit npm with more than 500 packages and 700+ versions affected.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.