JSFiddle - React, Tailwind, and code Playground
by Cwalkdawg
JavaScript
var relativeDateFactory = function (relStr) {
/**
* Relative dates assumes the current year
*
* Valid string syntax:
* First array value:
* any number format
* 3rd as in "3rd day of November"
* 3 as in "3 day of november"
* various string values:
* last as in "last day of January"
* first as in "first day of june"
*
* Second array value:
* "day"
* any day of the week in full or three letter format
* "3rd monday of november"
* "3rd mon of november"
*
* Third value in array is discarded
* "4th day in jan"
* "2nd monday elephant december"
* Fourth value
* "month" equates to every month
* any three letter or full named month format
* "4th day in month"
* "2nd sunday in month"
*/
var relArr = relStr.toLowerCase().trim().split(/\s+/g);
var dateInfo = {};
var monthArr = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
var monthDayLimit = [31, [28, 29], 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var dayArr = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
var weekday = [1, 2, 3, 4, 5];
var weekend = [0, 6];
var d = function() {
return new Date();
};
/**
* Convert an ordinal format number to an integer
* @param {String} ordinal The ordinal value
* @return {Number} The integer parsed and returned
*/
var ordinalToInteger = function (ordinal) {
var ordinalRegex = /^([0-9]{1,})(st|nd|th|rd)$/;
return (typeof ordinal === "string") ? parseInt(ordinal.replace(ordinalRegex, "$1"), 10) : ordinal;
};
/**
* Increment a given date
* @param {Date object} date The date to be incremented
* @param {number} by The number of days to increment
*/
var increment = function (date, by) {
...