dateMathematics

Pure Javascript plugin for date strings

by Felipe Alfaro

HTML

<div id="response_1"></div>
<div id="response_2"></div>
<div id="response_3"></div>

JavaScript

var dateMathematics = function($JSONObject) {
    function dm_padding(number, digits) {
        return new Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
    }

    function dm_sum($date, addOrRemoveDays) {
        var dateObject = new Date($date),
            days = new Number(addOrRemoveDays);
        return new Date(dateObject.setDate(dateObject.getDate() + days));
    }

    function dm_between($date1, $date2) {
        var timeDiff = Math.abs($date1.getTime() - $date2.getTime());
        return Math.ceil(timeDiff / (1000 * 3600 * 24));
    }

    function dm_string($date) {
        var YYYY = dm_padding($date.getFullYear().toString(), 4),
            MM = dm_padding(($date.getMonth() + 1).toString(), 2),
            DD = dm_padding($date.getDate().toString(), 2);
        return YYYY + '-' + MM + '-' + DD;
    }
    var between = $JSONObject.daysBetween || 1,
        sum = $JSONObject.sumDays || 0,
        initial = false,
        final = false,
        fixed = $JSONObject.anchor || 'initialDate';
    if ($JSONObject.initialDate) initial = new Date($JSONObject.initialDate.split('-'));
    if ($JSONObject.finalDate) final = new Date($JSONObject.finalDate.split('-'));
    if (initial == false && final == false) {
        return false;
    } else if (initial != false && final == false) {
        final = dm_sum(initial, Number(between) + Number(sum));
    } else if (initial == false && final != false) {
        initial = dm_sum(final, Number(-between));
        final = dm_sum(final, sum);
    } else {
        between = $JSONObject.daysBetween || false;
        if (between != false || between > 0) {
            switch (fixed) {
                case 'initialDate':
                    final = dm_sum(initial, Number(between) + Number(sum));
                    break;
                case 'finalDate':
                    initial = dm_sum(final, -(Number(between) + Number(sum)));
                    break;
            }
        } else if...