1.0.0 • Published 1 year ago

@rabiepenpm2/est-sapiente-placeat v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

dayjs-business-time

A Day.js plugin that allows you to work with Business Time.

  • Business Days
  • Business Hours
  • Business Minutes
  • Customize business days and hours
  • Customize Holidays to prevent them to be counted as Business Days

Getting Started

Special Version

  • add isRealBusinessTime function compared to the official v1.0.4
    expect(dayjs('2021-02-11 17:00:00').isRealBusinessTime()).toBe(false);
    expect(dayjs('2021-02-11 17:00:00').isBusinessTime()).toBe(true);

Table of Contents

Instalation

With NPM

npm i dayjs-business-time

With Yarn

yarn add dayjs-business-time

Usage

NodeJS

// First of all, include dayjs
const dayjs = require('dayjs');

// Then, include dayjs-business-time
const dayjsBusinessTime = require('dayjs-business-time');

// Attach dayjs plugin
dayjs.extend(dayjsBusinessTime);

// Now you have all Business Time methods in dayjs

Typescript

// First of all, include dayjs
import dayjs from 'dayjs';

// Then, include dayjs-business-time
import dayjsBusinessTime from 'dayjs-business-time';

// Attach dayjs plugin
dayjs.extend(dayjsBusinessTime);

// Now you have all Business Time methods in dayjs

Setup

Setting Holidays

By default, holidays are empty!

// Create your holidays array as string array
const holidays: string[] = [
    '2021-01-01',
    '2021-01-25',
    '2021-06-03',
];

// Add holidays to dayjs
dayjs.setHolidays(holidays);

Getting Holidays

const holidays: string[] = dayjs.setHolidays(holidays);

console.log(holidays);
// Output: ['2021-01-01', '2021-01-25', '2021-06-03']

Setting Business Times

By default, Business Times are Monday-Friday, 9am - 5pm, but you can setup as many Business Segments you want in a day

// Create your Business Week definition
const businessTimes: BusinessHoursMap = {
  sunday: null,
  monday: [
    { start: '09:00:00', end: '17:00:00' }
  ],
  tuesday: [
    { start: '09:00:00', end: '12:00:00' },
    { start: '13:00:00', end: '18:00:00' }
  ],
  wednesday: [
    { start: '09:00:00', end: '12:00:00' },
    { start: '13:00:00', end: '16:00:00' },
    { start: '13:00:00', end: '17:00:00' }
  ],
  thursday: [
    { start: '09:00:00', end: '17:00:00' }
  ],
  friday: [
    { start: '09:00:00', end: '17:00:00' }
  ],
  saturday: null,
}

// Set Business Times in dayjs
dayjs.setBusinessTime(businessTimes);

Checking

Check if a date is a Holiday

According to holidays setup

const isHoliday = dayjs('2021-02-01').isHoliday();

console.log(isHoliday); // false

Check if a date is a Business Day

Bussiness Days are days with Business Hours settled, excluding Holidays.

const isBusinessDay = dayjs('2021-02-01').isBusinessDay();

console.log(isBusinessDay); // true

Check if a Time is Business Time

Bussiness Times are all minutes between Start and End of a Business Time Segment.

const isBusinessTime = dayjs('2021-02-01 10:00:00').isBusinessTime();

console.log(isBusinessTime); // true

Next and Last

Get Next Business Day

const nextBusinessDay = dayjs('2021-02-01').nextBusinessDay();

console.log(nextBusinessDay); // 2021-02-02

Get Last Business Day

const lastBusinessDay = dayjs('2021-02-01').lastBusinessDay();

console.log(nextBusinessDay); // 2021-01-29

Get Next Business Time

const nextBusinessTime = dayjs('2021-02-01 18:00:00').nextBusinessTime();

console.log(nextBusinessTime); // 2021-02-02 09:00:00

Get Last Business Time

const lastBusinessTime = dayjs('2021-02-01 08:00:00').lastBusinessTime();

console.log(lastBusinessTime); // 2021-01-29 17:00:00

Adding Business Time

Add Business Time

const day = dayjs('2021-02-01 10:00:00');
const timeToAdd: number = 2;

// Possible BusinessTimeUnit is 'day', 'days', 'hour', 'hours', 'minute', 'minutes'
const unit: BusinessTimeUnit = 'days';

const newBusinessTime: Dayjs = day.addBusinessTime(timeToAdd, unit);

console.log(newBusinessTime); // 2021-02-02 10:00:00

Add Business Days

This method is just an alias for .addBusinessTime(timeToAdd, 'days')

const day = dayjs('2021-02-01 10:00:00');
const timeToAdd: number = 2;

const newBusinessTime: Dayjs = day.addBusinessDays(timeToAdd);

console.log(newBusinessTime); // 2021-02-02 10:00:00

Add Business Hours

This method is just an alias for .addBusinessTime(timeToAdd, 'hours')

const day = dayjs('2021-02-01 10:00:00');
const timeToAdd: number = 2;

const newBusinessTime: Dayjs = day.addBusinessHours(timeToAdd);

console.log(newBusinessTime); // 2021-02-01 12:00:00

Add Business Minutes

This method is just an alias for .addBusinessTime(timeToAdd, 'minutes')

const day = dayjs('2021-02-01 10:00:00');
const timeToAdd: number = 30;

const newBusinessTime: Dayjs = day.addBusinessMinutes(timeToAdd);

console.log(newBusinessTime); // 2021-02-01 10:30:00

Subtracting Business Time

Subtract Business Time

const day = dayjs('2021-02-01 10:00:00');
const timeToSubtract: number = 2;

// Possible BusinessTimeUnit is 'day', 'days', 'hour', 'hours', 'minute', 'minutes'
const unit: BusinessTimeUnit = 'days';

const newBusinessTime: Dayjs = day.subtractBusinessTime(timeToSubtract, unit);

console.log(newBusinessTime); // 2021-01-28 10:00:00

Subtract Business Days

This method is just an alias for .subtractBusinessTime(timeToSubtract, 'days')

const day = dayjs('2021-02-01 10:00:00');
const timeToSubtract: number = 2;

const newBusinessTime: Dayjs = day.subtractBusinessDays(timeToSubtract);

console.log(newBusinessTime); // 2021-01-28 10:00:00

Subtract Business Hours

This method is just an alias for .subtractBusinessTime(timeToSubtract, 'hours')

const day = dayjs('2021-02-01 12:00:00');
const timeToSubtract: number = 2;

const newBusinessTime: Dayjs = day.subtractBusinessHours(timeToSubtract);

console.log(newBusinessTime); // 2021-02-01 10:00:00

Subtract Business Minutes

This method is just an alias for .subtractBusinessTime(timeToSubtract, 'minutes')

const day = dayjs('2021-02-01 10:00:00');
const timeToSubtract: number = 30;

const newBusinessTime: Dayjs = day.subtractBusinessMinutes(timeToSubtract);

console.log(newBusinessTime); // 2021-02-01 09:30:00

Diff

Business Time Diff

const start: Dayjs = dayjs('2021-02-01 10:00:00');
const end: Dayjs = dayjs('2021-02-04 10:00:00');

// Possible BusinessTimeUnit is 'day', 'days', 'hour', 'hours', 'minute', 'minutes'
const unit: BusinessTimeUnit = 'days';

const difference: number = start.businessTimeDiff(end, unit);

console.log(difference); // 3

Business Days Diff

This method is just an alias for .businessTimeDiff(dateToCompare, 'days')

const start: Dayjs = dayjs('2021-02-01 10:00:00');
const end: Dayjs = dayjs('2021-02-04 10:00:00');

const difference: number = start.businessDaysDiff(end);

console.log(difference); // 3

Business Hours Diff

This method is just an alias for .businessTimeDiff(dateToCompare, 'hours')

const start: Dayjs = dayjs('2021-02-01 10:00:00');
const end: Dayjs = dayjs('2021-02-01 15:00:00');

const difference: number = start.businessHoursDiff(end);

console.log(difference); // 5

Business Minutes Diff

This method is just an alias for .businessTimeDiff(dateToCompare, 'minutes')

const start: Dayjs = dayjs('2021-02-01 10:00:00');
const end: Dayjs = dayjs('2021-02-01 10:45:00');

const difference: number = start.businessMinutesDiff(end);

console.log(difference); // 25
protocol-buffersBigUint64ArraycachehookformwrapcompilerloadingimportexportnumberconnecteslintrestbreakdatastructureInt32ArraylinuxtermObject.definePropertycode pointssespreprocessorcall-boundglobalsobjectweaksetresolvedefaultstatenameseast-asian-widthvariablesimmutablevalidateobjeditorschemeregular expressionsfastifytypescriptstatelessECMAScript 6Object.valuesmkdirphasOwnfindLastIndexweakmapcloudwatchsigtermloggingcurlinstallerformatlintfigletsuperagentless cssesUint32Arraymatchestestingaccessibilitylook-upWeakSetwritableiterationprefixbufferskeyinerror-handlingunicodereal-timestoragegatewayjestperformantpatchvestflagparsingprivate datafindLastESnextsortedsafeES2016authajvArray.prototype.flatMapmixinsperformancebundlingredactjsonpathfixed-widthsymbolscensorequalitypackagesutilquerysimpledbendpointObject.entriespolyfillchinesegetintrinsicsymlinkslinewrapString.prototype.matchAlldeepclonelessReactiveXpostcss-plugintoobjectnested cssInt8Arraywarningcharacterwhichgradients css3byteLengthdataviewes7slicemovedirectoryArray.prototype.findLastIndexeslint-plugindataViewpredictableinterruptsajaxirqpackage.jsonprotobufscheme-validationhttpmapreducefull-widthRegExp#flagsES2019ECMAScript 2019streams2cloudformationqsvalidationvarsrapidrate[[Prototype]]reduxextensionsomerestfuliebcryptserializergroupmonorepopushrfc4122openurlsqscopyFunction.prototype.namefullintrinsicstyleviewUint8ClampedArrayrobustdirURLSearchParamsenvironmentsomitttydeleteprivateelbStyleSheetrequestinvariantcssArrayBuffer#slicedebugtoArraytrimRighttostringtagparentvpcconsumeruntimeformsrdsdeepinstalles2018swfsinatrareducerthrottlestyleguidetappicomatchsignalasyncpromisesbyteimportcss nestingESwaitargparseoperating-systemreplayArray.prototype.filterCSS.envidhotfast-deep-copyES7flatsortiteratelibphonenumberflagsreact-testing-librarywindowsreusewhatwgpositivecommanderform-validation256arrayuninstallasciiequalpyyamlbannertypanionstringifyjsdiffauthenticationIteratormimeoncebyteOffsetjQuerygroupBywalkebshelpersworkflowoptimizerstdlibJSONestreeWeakMapphoneserializationHyBimoment0limitedtakefilestringenvvaluesarraybufferglobxhres6URLs3cloudfrontfindeslintpluginbootstrap lesssequencecore-jschromeoffsetreduceArray.prototype.flatponyfilltoolkitECMAScript 2023uuiddropspawntouchtslibspinnersnodejs$.extendexececmascriptfile systemdeep-clonemkdirelmdeep-copyes-shimsschemapropertywgetfiltermobilekoreanspeedmakePushmiddlewarejavascriptsetterreadablestreamArray.prototype.findLastautoprefixercallbacknameflattenreadablechaiString.prototype.trimeventsquerystringfast-deep-cloneopensrgbexit-codeasthandlerspluginsyntaxerrorspecduplexemrlastlrushimcorsObject.assignargumentsjoisignalscodesjasmineES2023toolshasOwnPropertybindio-tskeystrimEndes2017dependenciestesterrm -frdescriptorwritetrimLeftTypeBoxmime-dbroute53fpsReactiveExtensionsautoscalingstyled-componentscollection.es6assignmocharm -rfvalueconcattextpostcssliveprogressArray.prototype.flattenbusyECMAScript 2015inputtaskObject.fromEntriesremovemimetypesupterminalsuperstructproxyqueuebufferStreamrandomownfast-cloneObject.keysdotenvassertionfastsearchArraylimitInt16ArrayeventEmitterES6extendES2017Uint8ArrayloadbalancingfindupassertwatcherstreamsstructuredClonecmdlogtrimStartpreserve-symlinksextraprunematchPromisestartercommandnopestylesheetchromiumxdgECMAScript 2022i18nserializeidentifierspropairbnbdescriptionelectronentrieslinkarktypeawaitinternaliswidthyamlregularUint16Arrayreact-hooksexpressmetadataargsbrowserObject.islaunchbeanstalktypedarraysexeprocesspipefunctionemitpropertiesnegativemapshamArray.prototype.includesArrayBuffer.prototype.slicexdg-openfullwidthgenericsgradients csscolumnhardlinkswalkingforEachimmerFloat64ArrayinferenceTypeScriptmrurmiteratorYAMLinspectwordwrapcallboundpromiseconfigbrowserlistclassnamesTypedArrayqueueMicrotasktddcryptrmdircreatesharedarraybufferdiffthroattypeshashUnderscore_.extendkinesistapecolorSymbolmoduleES5zodlookl10ncryptoWebSocketsexpressionparseJSON-SchemaamazontoSortedsideclass-validatorcloudtrailES3listenersshrinkwraparraysjsboundbrowserslistroutercolumnsmatchAllwebsitewordbreakiamMicrosoftnegative zerolesscssstylingkarmaglobalmacosdayjsObservabletsjsdomescapehigher-orderjsxhookstypesafenpmjsonFloat32ArrayclassnamefluxquotelazySymbol.toStringTagartrangeerrormake dirArray.prototype.containsdateclonecloudsearchfind-uppathtimeshellcallbindconcurrencylengthECMAScript 5collectionsigintcolorsdefinevisuales5coercibleeslintconfigopenercss lesschildtoStringTagBigInt64Arraydebuggercircularcheckjshintindicatorcjkregular expressioncontainsoptimistworkertraverseidlemulti-packagedependency managerES2022call-bindfromhas-own@@toStringTagSetsharedgdprECMAScript 3jwtfetchreactmkdirsES2015haschannelregexredux-toolkitECMAScript 2017bluebirdreact-hook-formtypedstarttypeofbundlercomputed-typeses8exitincludesless mixinssyntaxpackagevariables in cssgetECMAScript 2018watchingflatMapwatches2016getoptprotoCSSStyleDeclarationWebSocketless.jsrequireerroravaexecutablewatchFilesetImmediateRFC-6455ECMAScript 2020deterministicdomECMAScript 2021shebangfunctionalloggerfolderagentRegExp.prototype.flagssymlinktypeargvStreamsenderoutputes2015a11yargumentisConcatSpreadableurlsES2018__proto__Reflect.getPrototypeOfcommand-linehttpssameValueZerostablesetECMAScript 2016ec2concatMapansipasswordes-shim APIrecursivesettingsMapframeworkformattinglockfileAsyncIteratorapppersistentpnpm9definePropertyfastcopyencryptionwebemojiefficientutil.inspect-0tc39yupslotglacierRxJSratelimittrimcolourfunctionsstylessymbolxtermgettersnsless compilerprettyfseventsES2021configurablefsfastcloneelasticachesetPrototypeOfECMAScript 7dynamodbgetPrototypeOfregexpbatchtypeerrorreadzerooptionmodulescoretelephonecharactersguidnativevalidutilityformawesomesaucedatanodeObservablesclassesaccessoreventDispatcherutilitiescompile lessRxcss-in-jsawsenvironmentcomparecalleverytyped arraybddlanguageparentsjapanesefast-copystringifierdescriptorsgetOwnPropertyDescriptorArrayBufferprototypeObject.getPrototypeOfwafes-abstractpackage managerassertsapispinnerstreambootstrap cssinternal slotminimalES2020Objectstatusworkspace:*typedarrayES8testdeepcopymergeparserenumerabledom-testing-librarycss variablecli
@rabiepenpm2/aut-minima-eum@rabiepenpm2/beatae-dignissimos-fugiat@rabiepenpm2/consequuntur-ut-ab@rabiepenpm2/consequuntur-voluptates-vero@rabiepenpm2/cumque-consectetur-maxime@rabiepenpm2/delectus-voluptates-nesciunt@rabiepenpm2/dignissimos-aut-nemo@rabiepenpm2/distinctio-maiores-asperiores@rabiepenpm2/dolore-itaque-maiores@rabiepenpm2/illo-impedit-libero@rabiepenpm2/ipsum-velit-minima@rabiepenpm2/itaque-aliquam-quis@rabiepenpm2/laborum-laborum-neque@rabiepenpm2/laudantium-ratione-in@rabiepenpm2/magnam-hic-eum@rabiepenpm2/minima-voluptate-impedit@rabiepenpm2/molestias-deleniti-non@rabiepenpm2/nam-omnis-rem@rabiepenpm2/natus-atque-sequi@rabiepenpm2/neque-repellendus-dolore@rabiepenpm2/odio-unde-quaerat@rabiepenpm2/odit-quae-quo@rabiepenpm2/omnis-ducimus-nam@rabiepenpm2/dolorem-assumenda-aliquid@rabiepenpm2/dolorem-provident-non@rabiepenpm2/doloremque-dolore-occaecati@rabiepenpm2/doloribus-rem-neque@rabiepenpm2/dolorum-iusto-ex@rabiepenpm2/dolorum-temporibus-rem@rabiepenpm2/ea-ad-perspiciatis@rabiepenpm2/earum-culpa-quae@rabiepenpm2/explicabo-cupiditate-ullam@rabiepenpm2/explicabo-ipsum-blanditiis@rabiepenpm2/explicabo-molestiae-ut@rabiepenpm2/fuga-eum-minus@rabiepenpm2/hic-ipsam-excepturi@rabiepenpm2/eius-commodi-expedita@rabiepenpm2/eius-quisquam-explicabo@rabiepenpm2/est-perspiciatis-culpa@rabiepenpm2/nobis-explicabo-doloribus@rabiepenpm2/non-iusto-esse@rabiepenpm2/nostrum-atque-rerum@rabiepenpm2/nostrum-molestias-voluptate@rabiepenpm2/numquam-in-architecto@rabiepenpm2/occaecati-ab-tenetur@rabiepenpm2/occaecati-facere-corporis@rabiepenpm2/odio-quos-quos@rabiepenpm2/quidem-sint-laboriosam@rabiepenpm2/quo-qui-accusamus@rabiepenpm2/reiciendis-at-nobis@rabiepenpm2/reprehenderit-cupiditate-illo@rabiepenpm2/ullam-facere-harum@rabiepenpm2/vel-beatae-veniam@rabiepenpm2/vero-debitis-modi@rabiepenpm2/vero-officiis-incidunt@rabiepenpm2/vero-porro-est@rabiepenpm2/voluptas-voluptatem-fuga@rabiepenpm2/voluptatem-illum-magnam@rabiepenpm2/porro-reiciendis-eos@rabiepenpm2/praesentium-reiciendis-fugiat@rabiepenpm2/quaerat-maiores-dolor@rabiepenpm2/quasi-ullam-libero@rabiepenpm2/quia-impedit-excepturi@rabiepenpm2/quibusdam-repellat-excepturi@rabiepenpm2/repudiandae-adipisci-reprehenderit@rabiepenpm2/repudiandae-explicabo-accusantium@rabiepenpm2/saepe-eaque-inventore@rabiepenpm2/tempora-incidunt-unde@rabiepenpm2/a-ut-deserunt@rabiepenpm2/ab-numquam-eaque@rabiepenpm2/ab-repellat-repellat@rabiepenpm2/accusantium-fugit-molestias@rabiepenpm2/alias-aperiam-optio@rabiepenpm2/alias-consequatur-delectus@rabiepenpm2/a-accusamus-exercitationem@rabiepenpm2/adipisci-perspiciatis-molestias@rabiepenpm2/alias-maiores-voluptatem@rabiepenpm2/aperiam-commodi-laudantium@rabiepenpm2/at-nulla-molestias@rabiepenpm2/at-voluptatum-accusamus@rabiepenpm2/consequuntur-possimus-architecto@rabiepenpm2/corrupti-quam-quasi@rabiepenpm2/delectus-incidunt-consectetur@rabiepenpm2/deleniti-eligendi-provident@rabiepenpm2/dignissimos-magni-nulla@rabiepenpm2/esse-necessitatibus-dolore@rabiepenpm2/expedita-amet-dolor@rabiepenpm2/harum-laborum-vero@rabiepenpm2/labore-quo-similique@rabiepenpm2/magni-similique-nisi@rabiepenpm2/maiores-porro-at@rabiepenpm2/officiis-placeat-numquam@rabiepenpm2/porro-quo-vel@rabiepenpm2/recusandae-aperiam-vero@rabiepenpm2/repellat-id-neque@rabiepenpm2/soluta-dolores-iure@rabiepenpm2/tenetur-debitis-modi
1.0.0

1 year ago