Restar o sumar horas a una fecha

Todos en algún momento nos 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 = String(this);
        return (nm == '0') ? nm : (nm.length < 2) ? '0' + nm : nm;
};
 
Number(0).double(); // Devuelve '0'
Number(3).double(); // Devuelve '03'
(32).double(); // Devuelve '32'
(589).double(); // Devuelve '589'
var n = 47; n.double(); // Devuelve '47'

OK, ahora a lo que vinimos:

function xDateTime (cnf)
{
        if (!cnf) cnf = {};
 
        var dte = new Date();
        var dteD = dte.getDate(), dteM = dte.getMonth() + 1, dteY = dte.getFullYear();
        var tme = dte.getTime(), 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(), tmeM = dte.getMinutes().double(), tmeS = dte.getSeconds().double();
 
        var rtn = '', rtnD = dteD + '/' + dteM + '/' + dteY, 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 la aplicación de los parámetros:

xDateTime({ type:'t', hours:5 });
xDateTime({ type:'d', hours:-36 });
xDateTime({ type:'d', hours:-48 });
xDateTime({ type:'dt', hours:24 });

About junihh

Dominicano y maquero. Dedicado al diseño web y UI. Centrado en XHTML, XML, CSS, JavaScript y comer dulces y caramelos.
This entry was posted in JavaScript and tagged , , , , , . Bookmark the permalink.

Comments are closed.