npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

fridagar

v4.2.2

Published

Small library for looking up Icelandic public holidays and other commonly observed 'special' days.

Downloads

8,317

Readme

Frídagar

Small, fast JavaScript/TypeScript library for looking up Icelandic public holidays, and resolving business days before/after a given day. It also provides info about other commonly observed "special" days such as "Bolludagur", etc.

"Half day" holidays (such as Christmas and New Year's Eve) are marked as such, and can be optionally treated as either "work days" or "non-work days", depending on need.

All day names/descriptions are in Icelandic, but each day has a stable key prop that can be used when translating its name into other languages.

All returned dates are in the UTC timezone and set to midnight.

npm install fridagar

Contents:


Methods


getHolidays

Syntax: getHolidays(year?: number, month?: number): Array<Holiday>

Returns all Icelandic public holidays and commonly celebrated "special" days for a given year — optionally narrowed down to a single month.

import { getHolidays } from "fridagar";

const holidays2018 = getHolidays(2018);
const holidaysInDecember2018 = getHolidays(2018, 12);

// If year is omitted the current year is used
const holidaysThisYear = getHolidays();
const holidaysInDecemberThisYear = getHolidays(undefined, 12);

getAllDays

Syntax: getAlldays(year?: number, month?: number): Array<Holiday | SpecialDay>

Returns all official Icelandic public holidays (non-working days) for a given year — optionally narrowed down to a single month.

import { getAllDays } from "fridagar";

const allDays2018 = getAllDays(2018);
const allDaysInDecember2018 = getAllDays(2018, 12);

// If year is omitted the current year is used
const allDaysThisYear = getAllDays();
const allDaysInDecemberThisYear = getAllDays(undefined, 12);

getAllDaysKeyed

Syntax: getAllDaysKeyed(year?: number): Record<DayKey, Holiday | SpecialDay>

Returns a keyed object with Icelandic public holidays and commonly celebrated "special" days for a given year. (Defaults to the current year.)

import type { Holiday, SpecialDay } from "fridagar";
import { getAllDaysKeyed } from "fridagar";

const allDays1995 = getAllDaysKeyed(1995);

// Note that the days are correctly typed
const easter95: Holiday = allDays1995.paska;
const ashWed95: SpecialDay = allDays1995.osku;

console.log(easter95.date);
// Logs new Date('1995-04-23')
console.log(easter95.description);
// Logs "Páskadagur"

getOtherDays

Syntax: getOtherDays(year?: number, month?: number): Array<SpecialDay>

Returns only unofficial, commonly celebrated "special days" (that are still workdays) for a given year — optionally narrowed down to a single month.

import { getOtherDays } from "fridagar";

const otherdays2018 = getOtherDays(2018);
const otherdaysInDecember2018 = getOtherDays(2018, 12);

// If year is omitted the current year is used
const otherdaysThisYear = getOtherDays();
const otherdaysInDecemberThisYear = getOtherDays(undefined, 12);

isHoliday

Syntax: isHoliday(date: Date): Holiday | undefined

Checks if a given date is an Icelandic public holiday, and if so, returns its info object.

import { isHoliday } from "fridagar";

const res1 = isHoliday(new Date("2018-12-24"));
console.log(res1);
// Logs the `Holiday` object for Aðfangadagur

const res2 = isHoliday(new Date("2018-12-23"));
console.log(res2);
// Logs `undefined` (as Þorláksmessa is not a holiday.)

isSpecialDay

Syntax: isSpecialDay(date: Date): Holiday | SpecialDay | undefined

Checks if a given date is either an Icelandic public holiday or a commonly celebrated "special" day, and if so, returns its info object.

import { isSpecialDay } from "fridagar";

const res1 = isSpecialDay(new Date("2018-12-24"));
console.log(res1);
// Logs the `Holiday` object for Aðfangadagur

const res2 = isSpecialDay(new Date("2018-12-23"));
console.log(res2);
// Logs the `SpecialDay` object for Þorláksmessa

const res3 = isSpecialDay(new Date("2018-12-19"));
console.log(res3);
// Logs `undefined`  (Because Dec. 19th is just a normal day.)

workdaysFromDate

Syntax: workdaysFromDate(days: number, refDate?: Date, includeHalfDays?: boolean): Date

Returns the days-th business-day before/after the reference date.

Defaults to counting half-day holidays as "non-work" days.

import { workdaysFromDate } from "fridagar";

const dec23th2018 = new Date("2018-12-23"); // Thursday
const jan1st2025 = new Date("2024-01-01"); // Tuesday

// Treats Aðfangadagur as a non-work day by default
const secondWorkDay = workdaysFromDate(2, dec23th2018);
// new Date('2021-12-28') // Tuesday

// Optionally treats Aðfangadagur as a work day
const secondWorkDayInclHalfDay = workdaysFromDate(2, dec23th2018, true);
// new Date('2021-12-27') // Monday

// One business days before New Year's day of 2024
const prevDay = workdaysFromDate(-1, jan1st2024);
// new Date('2023-12-29') // Friday

If the refDate is omitted, the current (today) date is used.

const thirdWorkDayFromToday = workdaysFromDate(3);

NOTE: The returned date is always set to 00:00:00 UTC.


Supported Days

These are the supported days and their identification keys:

  • Nýársdagur (nyars)
  • Þrettándinn (threttand)
  • Bóndadagur (bonda)
  • Bolludagur (bollu)
  • Sprengidagur (sprengi)
  • Öskudagur (osku)
  • Valentínusardagur (valent)
  • Konudagur (konu)
  • Skírdagur (skir)
  • Föstudagurinn langi (foslangi)
  • Páskadagur (paska)
  • Annar í páskum (paska2)
  • Sumardagurinn fyrsti (sumar1)
  • Verkalýðsdagurinn (mai1)
  • Uppstigningardagur (uppst)
  • Hvítasunnudagur (hvitas)
  • Annar í Hvítasunnu (hvitas2)
  • Sjómannadagurinn (sjomanna)
  • Þjóðhátíðardagurinn (jun17)
  • Sumarsólstöður (sumsolst)
  • Jónsmessa (jonsm)
  • Frídagur verslunarmanna (verslm)
  • Fyrsti vetrardagur (vetur1)
  • Hrekkjavaka (hrekkja)
  • Dagur íslenskrar tungu (isltungu)
  • Fullveldisdagurinn (fullv)
  • Vetrarsólstöður (vetsolst)
  • Þorláksmessa (thorl)
  • Aðfangadagur (adfanga)
  • Jóladagur (jola)
  • Annar í Jólum (jola2)
  • Gamlársdagur (gamlars)

Open Questions

Which Days to Include?

What to include is always subjective.

Currently the list focuses on:

  • Official public holidays (defined in law)
  • Official days of flag-raising ("fánadagar") often to do with national independence history, etc.
  • Traditional Icelandic cultural "special days", which are a mixture of centuries old folk-traditions and (Christian) religious culture.
  • Days that are actively celebrated despite not fulfilling any of the above criteria. (Like "Hrekkjavaka")

This means "Valentínusardagur" is a bit of an oddball in this list. It's inclusion begs the question why we don't include other similar days such as "Mæðradagurinn", "Feðradagurinn", or even "Singles Day". Or should it be removed?

The "on the fence" category includes:

  • Mæðradagurinn & Feðradagurinn
  • Kvennafrídagurinn
  • Bjórdagurinn
  • Beginning/end of Ramadan
  • St. Patrick's Day

Historical Accuracy

Example: "Dagur íslenskrar tungu" was first celebrated in 1996. Should getAllDays(1980) include it or not?

Problem is that many days don't have a definite starting date, they just faded into existence over time. Other days (such as "Mæðradagurinn") have had different dates at different times.

Currently the library does NOT aim for historical accuracy, and will return all "modern day" special days for any year — and completely ignore the fact that "Frídagur verslunarmanna in the year 345 BC" makes absolutely no sense.


Exported types


type Holiday

An object describing an Icelandic public holiday.

import type { Holiday } from "fridagar";

// Example
const xmasEve2017: Holiday = {
  date: new Date("2017-12-24T00:00:00.000Z"),
  description: "Aðfangadagur",
  key: "adfanga", // stable identifier for this holiday
  holiday: true,
  halfDay: true,
};

NOTE: All dates are set to 00:00:00 UTC


type SpecialDay

An object describing an Icelandic commonly celebrated "special" day, such as "Bolludagur", etc.

import type { SpecialDay } from "fridagar";

// Example
const sovereignDay2017: SpecialDay = {
  date: new Date("2017-12-01T00:00:00.000Z"),
  description: "Fullveldisdagurinn",
  key: "fullv", // stable identifier for this special day
  holiday: false, // not a public holiday
};

NOTE: All dates are set to 00:00:00 UTC


type DayKey, HolidayKey, SpecialDayKey

String union types of all possible key values for Holiday and SpecialDay objects. These are mainly useful when translating the day names/descriptions into other languages.

import type { DayKey, HolidayKey, SpecialDayKey } from "fridagar";

const holidayNamesPolish: Record<HolidayKey, string> = {
  nyars: "Nowy Rok",
  adfanga: "Wigilia",
  jola: "Boże Narodzenie",
  // etc...
};
const specialDayNamesPolish: Record<SpecialDayKey, string> = {
  bollu: "Dzień Pączka",
  sjomanna: "Dzień Marynarza",
  // etc...
};

// DayKey is a shorthand union of HolidayKey and SpecialDayKey
const allDayNamesPolish: Record<DayKey, string> = {
  ...holidayNamesPolish,
  ...specialDayNamesPolish,
};

Contributing

This project uses the Bun runtime for development (tests, build, etc.)

PRs are welcoms!


Change Log

See CHANGELOG.md

Other Iceland-Themed Libraries

  • is-kennitala - Best-of-breed kennitala (Icelandic national ID) validation and utility library.
  • postnumer - Icelandic post-codes (Póstnúmer) and town/locality names and their National Registry ID codes.