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) {
   ...