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