Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

luxon-business-days

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

luxon-business-days

Luxon plugin to manipulate time through business days

  • 3.0.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
25K
increased by0.6%
Maintainers
1
Weekly downloads
 
Created
Source

Luxon Business Days

npm CircleCI codecov luxon-business-days npm jsDelivr hits (npm)

Luxon Business Days is a Luxon plugin for calculating and manipulating business days.

Inspired by moment-business-days.

Features

  • Add business days to a standard luxon DateTime instance. For instance, to calculate the arrival date of a shipment.
  • Customizable and extendable. Configure the business working days and holidays of your business.
  • Uses holiday "matcher functions" avoiding the need to manually maintain and update holiday date configs every year.

Install

Versions

Package versions 3+ supports luxon 3+.

For luxon ^1.X, check out 2.8.3

Via NPM

Already using luxon:

yarn add luxon-business-days
- import { DateTime } from 'luxon';
+ import { DateTime } from 'luxon-business-days';
// Use DateTime as normal

Not already using luxon:

yarn add luxon luxon-business-days
import { DateTime } from 'luxon-business-days';
// Use DateTime as normal

Via Browser Script

<script src="https://cdn.jsdelivr.net/npm/luxon@1.25.0/build/global/luxon.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/luxon-business-days/dist/index.js"></script>

Make sure luxon script is loaded before luxon-business-days. For production use, it is recommended to tag a version in the script url like so:

https://cdn.jsdelivr.net/npm/luxon-business-days@2.7.0/dist/index.js
<head> 
  <script src="https://cdn.jsdelivr.net/npm/luxon@1.25.0/build/global/luxon.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/luxon-business-days/dist/index.js"></script>
</head> 

<body> 
  <script>
    let dt = luxon.DateTime.local();
    const nextBizDay = dt.plusBusiness();

    console.log(nextBizDay.toLocaleString());
  </script>
</body> 

Config

Default business days:

  • Monday
  • Tuesday
  • Wednesday
  • Thursday
  • Friday

Default holidays (aka shipping holidays via UPS):

  • New Year's Day
  • Easter Day
  • Memorial Day
  • Independance Day
  • Labor Day
  • Thanksgiving Day
  • Christmas Day
Configure business days
import { DateTime } from 'luxon-business-days';

const dt = DateTime.local();

// [Mon, Thur, Fri, Sun]
const awesomeFourDayBusinessWeek = [1, 4, 5, 7];

dt.setupBusiness({ businessDays: awesomeFourDayBusinessWeek });
Configure holidays

Pick from available holiday matchers:

import { DateTime } from 'luxon-business-days';

const dt = DateTime.local();
const { availableHolidayMatchers } = dt;
const myCompanyIsNoFun = [
  availableHolidayMatchers.isNewYearsDay,
  availableHolidayMatchers.isChristmasDay,
];

dt.setupBusiness({ holidayMatchers: myCompanyIsNoFun });

No holidays:

import { DateTime } from 'luxon-business-days';

const dt = DateTime.local();

dt.setupBusiness({ holidayMatchers: [] });
// Congrats, you will successfuly get everyone to quit

Custom holiday matchers:

A holiday matcher is simply a function that takes in a DateTime instance and returns a boolean. This allows you to algorithmically determine what is considered a holiday without requiring a hardcoded list of dates that are updated and maintained annually.

It is easy to write a basic matcher:

import { DateTime } from 'luxon-business-days';

/**
 * @param {DateTime} - An instance of DateTime.
 * @returns {boolean}
 */
const isCelebratingKobe = function(inst) {
  // Commemorate the day Kobe died
  const kobeRIP = DateTime.fromObject({ month: 1, day: 26 });

  // Celebrate Kobe Day
  const kobeDay = DateTime.fromObject({ month: 8, day: 24 });

  // Matches the following two days regardless of year
  return +inst === +kobeRIP || +inst === +kobeDay;
};

const dt = DateTime.local();
const myHolidays = [
  dt.availableHolidayMatchers.isNewYearsDay,
  dt.availableHolidayMatchers.isChristmasDay,
  isCelebratingKobe,
];

dt.setupBusiness({ holidayMatchers: myHolidays });
// Congrats, now your business will consider New Years, 
// Christmas, and the two Kobe days as holidays.

Tip: When writing custom holiday matchers, it is probably better to avoid harcoding years or dates and instead programatically generating holidays. Take a look at the provided matchers for ideas.

Usage

Basic:

import { DateTime } from 'luxon-business-days';

// Day before July 4
let dt = DateTime.local(2019, 7, 3);

dt = dt.plusBusiness(); // 7/5/19 - Friday
dt = dt.plusBusiness({ days: 2 }); // 7/9/19 - Tuesday (Skipped through Saturday/Sunday)
dt = dt.minusBusiness({ days: 2 }); // back to 7/5/19
dt = dt.minusBusiness({ days: -2 }) // back to 7/9/19
dt = dt.plusBusiness({ days: -2 }); // back to 7/5/19

// Now do what you normally would with a DateTime instance.

Passing additional arguments to matchers:

Perhaps you need to calculate regional holidays manually and want to pass extra information to your custom holiday matchers.

import { DateTime } from 'luxon-business-days';

/**
 * @param {DateTime} - An instance of DateTime.
 * @param {string} region - An example extra param.
 * @param {Object} someStuff - An example extra param.
 * @returns {boolean}
 */
const someCustomRegionalMatcher = (inst, region, someStuff) => {
  // does some matching based on region and data in someStuff
}

/**
 * @param {DateTime} - An instance of DateTime.
 * @returns {boolean}
 */
const anotherCustomMatcher = inst => {
  // does some matching, but doesn't need additional info
}

let dt = DateTime.local();
const myHolidays = [
  someCustomRegionalMatcher,
  anotherCustomMatcher,
];

dt.setupBusiness({ holidayMatchers: myHolidays });

// Pass any additional argument to all your matchers
dt.isHoliday('middle-america', {some: 'stuff'});

Examples

API

Members

DateTimeDateTime

Functions

getEasterMonthAndDay(year)Array.<number>

Returns the month and day of Easter for a given year.

DateTime ⇐ DateTime

Kind: global variable
Extends: DateTime

dateTime.availableHolidayMatchers : Object

All built-in holiday matchers.

Kind: instance property of DateTime
Extends: DateTime
Properties

NameTypeDescription
isNewYearsDayfunctionA provided holiday matcher.
isMLKDayfunctionA provided holiday matcher.
isEasterDayfunctionA provided holiday matcher.
isMemorialDayfunctionA provided holiday matcher.
isIndependanceDayfunctionA provided holiday matcher.
isLaborDayfunctionA provided holiday matcher.
isColumbusDayfunctionA provided holiday matcher.
isThanksgivingDayfunctionA provided holiday matcher.
isChristmasDayfunctionA provided holiday matcher.

dateTime.availableHolidayHelpers : Object

Exposes all available holiday helpers to a DateTime instance.

Kind: instance property of DateTime
Extends: DateTime
Properties

NameTypeDescription
getEasterMonthAndDayfunctionA provided holiday helper function that can be helpful for custom holiday matchers.

dateTime.setupBusiness([businessDays], [holidayMatchers]) ⇐ DateTime

Sets up business days and holiday matchers globally for all DateTime instances.

Kind: instance method of DateTime
Extends: DateTime

ParamTypeDefaultDescription
[businessDays]Array.<number>DEFAULT_BUSINESS_DAYSThe working business days for the business.
[holidayMatchers]Array.<function()>DEFAULT_HOLIDAY_MATCHERSThe holiday matchers used to check if a particular day is a holiday for the business.

dateTime.clearBusinessSetup() ⇐ DateTime

Clears business setup globally from all DateTime instances.

Kind: instance method of DateTime
Extends: DateTime

dateTime.isHoliday([...args]) ⇒ boolean

Checks if DateTime instance is a holiday by checking against all holiday matchers.

Kind: instance method of DateTime
Extends: DateTime

ParamTypeDescription
[...args]*Any additional arguments to pass through to each holiday matcher.

dateTime.isBusinessDay() ⇒ boolean

Checks if DateTime instance is a business day.

Kind: instance method of DateTime
Extends: DateTime

dateTime.plusBusiness([days]) ⇒ DateTime

Adds business days to an existing DateTime instance.

Kind: instance method of DateTime
Extends: DateTime

ParamTypeDefaultDescription
[days]number1The number of business days to add.

dateTime.minusBusiness([days]) ⇒ DateTime

Subtracts business days to an existing DateTime instance.

Kind: instance method of DateTime
Extends: DateTime

ParamTypeDefaultDescription
[days]number1The number of business days to subtract.

getEasterMonthAndDay(year) ⇒ Array.<number>

Returns the month and day of Easter for a given year.

Kind: global function
Returns: Array.<number> - Returns month and day via [month, day].

ParamType
yearnumber

Keywords

FAQs

Package last updated on 06 Sep 2022

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc