dominikbulaj
8/25/2015 - 7:29 PM

Add or remove time from given date. Examples: getNewTime('7 days') // return current time + 7 days getNewTime('-1 month') // return past tim

Add or remove time from given date. Examples: getNewTime('7 days') // return current time + 7 days getNewTime('-1 month') // return past time (last month)

    /**
     * Add (or remove) some time from current date. Returns new Date
     *
     * @param {string} elapsedTime
     * @param {Date|null} dateObject
     * @returns {Date}
     * @private
     */
    function getNewTime(elapsedTime, dateObject) {

        var newDate = new Date();

        // no dateObjecy
        switch (typeof dateObject) {
            case 'undefined': // no action - newDate already defined
                break;

            case 'number':
                newDate = new Date(dateObject);
                break;

            case 'string':
                newDate = new Date(dateObject);
                break;
        }

        var elapsedTimeParts = elapsedTime.match(/^(\-?\s*\d+)\s+(hours?|days?|months?)$/);
        if (elapsedTimeParts) { // must be valid format
            var timeDiff = parseInt(elapsedTimeParts[1].replace(/\s+/, ''), 10);
            switch (elapsedTimeParts[2]) {
                case 'hour':
                case 'hours':
                    newDate.setHours(newDate.getHours() + timeDiff);
                    break;

                case 'days':
                case 'day':
                    newDate.setDate(newDate.getDate() + timeDiff);
                    break;

                case 'month':
                case 'months':
                    newDate.setMonth(newDate.getMonth() + timeDiff);
                    break;
            }
        }

        return newDate;
    }