JavaScript check if date is weekend or public holiday

13-06-2022 door Roy de Kleijn

Sometimes it is required to check if a certain date is a public holiday or day in the weekend.

If it is the case then you might be interested in adding enough days to make sure the date is a "normal" working day.

We can use the following JavaScript snippet to perform such check.

Utility class (file saved as DateUtil.js):

const holidays = {
  "0,1": "public holiday 1",
  "3,15": "public holiday 2",
  "3,17": "public holiday 3",
  "3,18": "public holiday 4",
  "6,13": "public holiday 5",
  "6,14": "public holiday 6",
  "6,15": "public holiday 7",
};

class DateUtil {

  static #isWeekend(date) {
    const dayOfWeek = date.getDay();
    return (dayOfWeek === 6) || (dayOfWeek === 0);
  }

  static #isPublicHoliday(date) {
    return !!holidays[date.getMonth() + ',' + date.getDate()];
  }

  static isWeekendOrPublicHoliday(date) {
    return this.#isPublicHoliday(date) || this.#isWeekend(date);
  }
}

module.exports = {DateUtil}

Using the utility class (file saved as is-weekend-or-public-holiday.js):

const {DateUtil} = require('./DateUtil')

let date = new Date();
date.setDate(date.getDate() + 30);

console.log(`${date} is weekend or public holiday: ${DateUtil.isWeekendOrPublicHoliday(date)}`)

while (DateUtil.isWeekendOrPublicHoliday(date)) {
  date.setDate(date.getDate() + 1);
}

console.log(`${date} is weekend or public holiday: ${DateUtil.isWeekendOrPublicHoliday(date)}`)

Example output (run code with: node path/to/is-weekend-or-public-holiday.js):

Wed Jul 13 2022 16:17:09 GMT+0200 (Central European Summer Time) is weekend or public holiday: true
Mon Jul 18 2022 16:17:09 GMT+0200 (Central European Summer Time) is weekend or public holiday: false

You only need to define the set of public holidays that applies to your country.

Delen: