@divante-adventure/work-moment

1.0.2 • Public • Published

work-moment

moment.js extended with moment-range and some utility functions.

Index

Installation

npm install -S @divante-adventure/work-moment

It contains all functions from moment.js extended with moment-range, so in order to replace moment.js with this library you just need to replace:

import moment from 'moment';

or, in case of extending with moment-range:

import Moment from 'moment';
import {extendMoment} from 'moment-range';
const moment = extendMoment(Moment);

with this one line:

import moment from '@divante-adventure/work-moment';

All functions of moment and moment-range are now working:

let date = moment('2018-11-29');
console.log(date.year()); // 2018

let start = moment('2018-11-01');
let end = moment('2018-11-30');
let range = moment.range(start, end);
let days = Array.from(range.by('day')).length;
console.log(days); // 30

work-moment utility functions

toIsoDate

Converts date to ISO 8601 ordinal date:

YYYYDDD

Where YYYY is a four-digit year and DDD is a three-digit day in year.

moment.toIsoDate() is a shortcut for moment.format('YYYYDDDD').

console.log(moment('2018-01-01').isoDate()); //2018001
console.log(moment('2018-11-29').isoDate()); //2018333

rangeOf

Creates range object with given range including date. For example, if your moment object points at 2018-11-23 and you will use rangeOf('month'), it will return range starting in 2018-11-01 and ending in 2018-11-30.

let date = moment('2018-03-15');
let year = date.rangeOf('year');
console.log(year.start.format('YYYY-MM-DD')); //2018-01-01
console.log(year.end.format('YYYY-MM-DD')); //2018-12-31

Shortcuts for rangeOf

let date = moment('2018-03-15');
let day = date.rangeOfDay(); // === date.rangeOf('day');
let week = date.rangeOfWeek(); // === date.rangeOf('week');
let month = date.rangeOfMonth(); // === date.rangeOf('month');
let quarter = date.rangeOfQuarter(); // === date.rangeOf('quarter');
let year = date.rangeOfYear();  // === date.rangeOf('year');

isFreeDay and isWorkingDay

isFreeDay return true if given day is either saturday or sunday and false otherwise. isWorkingDay returns opposite values.

moment('2018-11-09').isFreeDay(); // false
moment('2018-11-09').isWorkingDay(); //true

moment('2018-11-10').isFreeDay(); // true
moment('2018-11-10').isWorkingDay(); // false

As an additional parameter, you can pass array of free days formatted in ISO 8601 ordinal date (result of toIsoDate function). These days will be treated as additional free days, i.e. holidays.

let freeDays = ['2018-12-25', '2018-12-26']; //Christmas
let formattedFreeDays = freeDays.map(entry => moment(entry).toIsoDate()); // ISO 8601 formatted dates

moment('2018-12-25').isFreeDay(); // false - 25th of December 2018 is a tuesday
moment('2018-12-25').isFreeDay(formattedFreeDays); // true

workingDays

For given range (treated as in rangeOf function) returns array of working days. It can also accept ISO 8601 ordinal dates array as additional free days.

let freeDays = ['2018-12-25', '2018-12-26']; //Christmas
let formattedFreeDays = freeDays.map(entry => moment(entry).toIsoDate()); // ISO 8601 formatted dates

//returns array of 5 entries between 2018-12-24 and 2018-12-28:
moment('2018-12-25').workingDays('week');

//returns array of 3 entries: 2018-12-24, 2018-12-27 and 2018-12-28:
moment('2018-12-25').workingDays('week', formattedFreeDays);

workingDaysCount

workingDaysCount is a shortcut for workingDays.length:

let freeDays = ['2018-12-25', '2018-12-26']; //Christmas
let formattedFreeDays = freeDays.map(entry => moment(entry).toIsoDate()); // ISO 8601 formatted dates

moment('2018-12-25').workingDaysCount('week'); //5
moment('2018-12-25').workingDaysCount('week', formattedFreeDays); //3

workingSeconds

Applies multiplier to workingDaysCount. By default one working day equals to 8 hours (28800 seconds).

let freeDays = ['2018-12-25', '2018-12-26']; //Christmas
let formattedFreeDays = freeDays.map(entry => moment(entry).toIsoDate()); // ISO 8601 formatted dates
let fourHours = 4 * 60 * 60; // 14400 seconds

moment('2018-12-25').workingDaysCount('week'); // 5
moment('2018-12-25').workingSeconds('week'); // 5 * 28800
moment('2018-12-25').workingSeconds('week', [], fourHours); // 5 * 14400
moment('2018-12-25').workingDaysCount('week', formattedFreeDays); // 3
moment('2018-12-25').workingDaysCount('week', formattedFreeDays); // 3 * 28800
moment('2018-12-25').workingDaysCount('week', formattedFreeDays, fourHours); // 3 * 14400

Readme

Keywords

none

Package Sidebar

Install

npm i @divante-adventure/work-moment

Weekly Downloads

1

Version

1.0.2

License

MIT

Unpacked Size

13.3 kB

Total Files

8

Last publish

Collaborators

  • divante