@shopgate/pwa-common
Version:
Common library for the Shopgate Connect PWA.
28 lines • 2.46 kB
JavaScript
/**
* @refactor install moment.js
*/var durationRegex=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;var durationModifiers={Year:function Year(date,unit){return date.setFullYear(date.getFullYear()+unit);},Month:function Month(date,unit){return date.setMonth(date.getMonth()+unit);},Week:function Week(date,unit){return date.setDate(date.getDate()+unit*7);},Day:function Day(date,unit){return date.setDate(date.getDate()+unit);},Hour:function Hour(date,unit){return date.setHours(date.getHours()+unit);},Minute:function Minute(date,unit){return date.setMinutes(date.getMinutes()+unit);},Second:function Second(date,unit){return date.setSeconds(date.getSeconds()+unit);}};/**
* Returns true if date exclusively before (<=).
* @param {Date} date date object.
* @param {Date} beforeDate comparison date.
* @return {boolean}.
*/export var isBefore=function isBefore(date,beforeDate){return!!(beforeDate&&date<beforeDate);};/**
* Returns true if date exclusively after (>=).
* @param {Date} date date object.
* @param {Date} afterDate comparison date.
* @return {boolean}.
*/export var isAfter=function isAfter(date,afterDate){return!!(afterDate&&date>afterDate);};/**
* Returns true if date inclusively between (>= & <=).
* @param {Date} date date object.
* @param {Date} leftDate left bound.
* @param {Date} rightDate right bound.
* @return {boolean}.
*/export var isBetween=function isBetween(date,leftDate,rightDate){if(!rightDate){return false;}if(!leftDate&&rightDate){return isBefore(date,rightDate);}return date>=leftDate&&date<=rightDate;};/**
* Parse duration
* @param {string} duration ISO 8601 duration.
* @return {Object}
*/export var parseDuration=function parseDuration(duration){var d=durationRegex.exec(duration)||[];var fr=d[1]==='-'?-1:1;return{Year:d[2]&&(d[2]>0?d[2]*fr:d[2]),Month:d[3]&&(d[3]>0?d[3]*fr:d[3]),Week:d[4]&&(d[4]>0?d[4]*fr:d[4]),Day:d[5]&&(d[5]>0?d[5]*fr:d[5]),Hour:d[6]&&(d[6]>0?d[6]*fr:d[6]),Minute:d[7]&&(d[7]>0?d[7]*fr:d[7]),Second:d[8]&&(d[8]>0?d[8]*fr:d[8])};};/**
* Add duration to given date
* @param {Date} date date object.
* @param {string} duration ISO 8601 duration.
* @return {void}
*/export var addDuration=function addDuration(date,duration){var parsed=parseDuration(duration);Object.keys(parsed).forEach(function(k){if(parsed[k]){durationModifiers[k](date,parsed[k]);}});};