Restar o sumar horas a una fecha
@ JavaScript @ Permalink
Todos os hemos visto en la obligación de guardar la fecha/hora de alguna transacción. Por seguridad lo preferible es hacer dicho calculo en el back-end, pero si la seguridad no es tan importante acá la herramienta que necesitas para restar o sumar horas o días a la fecha actual.
Primero la siguiente función, que nos permitirá mostrar las horas, minutos o días de la fecha con dos carácteres en vez de uno:
Number.prototype.double = function ()
{
var nm = this.toString();
return (nm == '0') ? nm : ((nm.length < 2) ? '0' + nm : nm);
};
Number(0).double(); // RESPUESTA: '0'
Number(3).double(); // RESPUESTA: '03'
(32).double(); // RESPUESTA: '32'
(589).double(); // RESPUESTA: '589'
var n = 47;
n.double(); // RESPUESTA: '47'
OK, ahora a lo que vinimos:
function xDateTime (cnf)
{
var cnf = cnf || {};
var dte = new Date();
var dteD = dte.getDate()
var dteM = dte.getMonth() + 1;
var dteY = dte.getFullYear();
var tme = dte.getTime()
var nDte = dte.setTime(parseInt(tme + parseInt((cnf.hours ? cnf.hours : 0) * 60 * 60 * 1000)));
dteD = dte.getDate().double();
dteM = dte.getMonth() + 1;
dteY = dte.getFullYear();
var tmeH = (dte.getHours() >= 12 ? dte.getHours()-12 : dte.getHours()).double();
var tmeM = dte.getMinutes().double()
var tmeS = dte.getSeconds().double();
var rtn = '';
var rtnD = dteD + '/' + dteM + '/' + dteY;
var rtnT = tmeH + ':' + tmeM + ':' + tmeS + (dte.getHours() >= 12 ? 'PM' : 'AM');
switch (cnf.type)
{
case 'd':
rtn = rtnD;
break;
case 't':
rtn = rtnT;
break;
case 'dt':
rtn = rtnD + ' ' + rtnT;
break;
case 'td':
rtn = rtnT + ' ' + rtnD;
break;
default:
rtn = rtnD + ' ' + rtnT;
};
return rtn;
};
Para recibir la hora o fecha, aplicamos así:
xDateTime();
xDateTime({ type: 'd' });
xDateTime({ type: 't' });
xDateTime({ type: 'dt' });
xDateTime({ type: 'td' });
Si necesitamos que la función devuelva una hora o fecha adelantada, aplicamos la cantidad de horas que necesitamos adelantar:
xDateTime({ hours: 5 });
xDateTime({ hours: 12 });
xDateTime({ hours: 24 });
xDateTime({ hours: 36 });
xDateTime({ hours: 48 });
Similar con una fecha atrasada:
xDateTime({ hours: -24 });
xDateTime({ hours: -36 });
xDateTime({ hours: -48 });
Combinando ambos parámetros:
xDateTime({ type: 't', hours: 5 });
xDateTime({ type: 'd', hours: -36 });
xDateTime({ type: 'd', hours: -48 });
xDateTime({ type: 'dt', hours: 24 });