Keep in touch

RSS Feed Twitter Facebook Delicious

Subscribe via Email

addTimeToDate Sumar/Restar Tiempo a Fechas JavaScript

March 11th, 2010 by pako received 6 Comments »
Date addTimeToDate(int time, String unit, Date date,Boolean referencia) (v1.1)
Descripción:Suma o Resta tiempo a una fecha(objeto Date), puede ser usada tanto para
agregar como quitar tiempo a una fecha, el tiempo se da en milisegundos,
segundos, minutos, horas, días, meses o años
Parámetros:

  • Time:Entero con la cantidad de unidades de tiempo a sumar a
    la fecha
  • Unit: String con el tipo de unidades que se agregaran a la fecha
    • y: Años
    • M: Meses
    • w: Semanas
    • d: Días
    • h: Horas
    • m: Minutos
    • s: Segundos
    • “”: (En blanco o cualquier otro) Milisegundos
  • Date: Objeto Date al que se le sumara el tiempo Indicado
  • dateReference: es un booleano
    • true indica que
      se operará directamente en el objeto Date pasado en el tercer parámetro,
      de igual forma se retorna la referencia al final de su ejecución.
    • false, la función creara un nuevo objeto Date y lo retornara
      al final de su ejecución sin afectar el objeto Date original

Retorno: Objeto Date, con la nueva fecha resultante de la suma de tiempos

Download

 /**
* <div>
*        <b>Date addTimeToDate(int time, String unit, Date date,Boolean referencia)</b> (v1.1)
*   </div>
*   <div>
*   <b>Descripción</b>:Suma o Resta tiempo a una fecha(objeto Date), puede ser usada tanto para
*    agregar como quitar tiempo a una fecha, el tiempo se da en milisegundos,
*    segundos, minutos, horas, días, meses o años
*   </div>
*   <div>
*    <b>Parámetros:</b>
*    <ul>
*        <li><b>Time</b>:Entero con la cantidad de unidades de tiempo a sumar a
*                   la fecha</li>
*        <li><b>Unit:</b> String con el tipo de unidades que se agregaran a la fecha
*            <ul>
*                <li><b>y</b>: Años</li>
*                <li><b>M</b>: Meses</li>
*                <li><b>w</b>: Semanas</li>
*                <li><b>d</b>: Días</li>
*                <li><b>h</b>: Horas</li>
*                <li><b>m</b>: Minutos</li>
*                <li><b>s</b>: Segundos</li>
*                <li><b>""</b>: (En blanco o cualquier otro) Milisegundos</li>
*            </ul>
*        </li>
*        <li><b>Date</b>: Objeto Date al que se le sumara el tiempo Indicado</li>
*        <li><b>dateReference</b>: es un booleano
*               <ul>
*              <li><b><i>true</i></b> indica que
*              se operará directamente en el objeto Date pasado en el tercer parámetro,
*              de igual forma se retorna la referencia al final de su ejecución.</li>
*
*              <li><b><i>false</i></b>, la función creara un nuevo objeto Date y lo retornara
*                al final de su ejecución sin afectar el objeto Date original
* </li>
* </ul>
*        </li>
*   </ul>
*  <b>Retorno: </b> Objeto Date, con la nueva fecha resultante de la suma de tiempos
*  </div>

* <div>
* By: JFcoDiaz <br/>
* wariodiaz&#64;gmail.com<br/>
* www.devtics.com.mx<br/>
* Licencia GPLv3/MIT
*
* 9 de Mazo del 2010
* Update V1.1
* 20/Jun/2010
* </div>
*/

function addTimeToDate(time,unit,objDate,dateReference){
    var dateTemp=(dateReference)?objDate:new Date(objDate);
    switch(unit){
        case 'y': dateTemp.setFullYear(objDate.getFullYear()+time); break;
        case 'M': dateTemp.setMonth(objDate.getMonth()+time); break;
        case 'w': dateTemp.setTime(dateTemp.getTime()+(time*7*24*60*60*1000)); break;
        case 'd': dateTemp.setTime(dateTemp.getTime()+(time*24*60*60*1000)); break;
        case 'h': dateTemp.setTime(dateTemp.getTime()+(time*60*60*1000)); break;
        case 'm': dateTemp.setTime(dateTemp.getTime()+(time*60*1000)); break;
        case 's': dateTemp.setTime(dateTemp.getTime()+(time*1000)); break;
        default : dateTemp.setTime(dateTemp.getTime()+time); break;
    }
    return dateTemp;
}

para restar tiempo a la fecha, solo pasa el valor en negativo ;)

Ejemplo:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="addTimeToDate.js" type="text/javascript"></script>
    </head>
    <body>
        <script type="text/javascript">
            /* www.devtics.com.mx
             * By Jfco Diaz
             * @fcodiaz
             * 22/06/2010
             * Licencia GPLv3/MIT
             **/
            var hoy=new Date();//se crea el objeto Date a la fecha actual
            function printBr(txt){
                document.write(txt+"<br/>");
            }
            function printHr(txt){
                document.write(txt+"<hr/>");
            }
            printHr("Hoy Es "+hoy);

            printBr("Hoy + 700000 milisegundos "+addTimeToDate(700000, '', hoy));
            printHr("Hoy - 700000 milisegundos "+addTimeToDate(-700000, '', hoy));

            printBr("Hoy + 150 segundos "+addTimeToDate(150, 's', hoy));
            printHr("Hoy - 150 segundos "+addTimeToDate(-150, 's', hoy));

            printBr("Hoy + 10 min  "+addTimeToDate(10, 'm', hoy));
            printHr("Hoy - 20 min  "+addTimeToDate(-20, 'm', hoy));

            printBr("Hoy + 2 hrs  "+addTimeToDate(5, 'h', hoy));
            printHr("Hoy - 5 hrs  "+addTimeToDate(5, 'h', hoy));

            printBr("Hoy + 5 dias "+addTimeToDate(5, 'd', hoy));
            printHr("Hoy - 10 dias "+addTimeToDate(-10, 'd', hoy));

            printBr("Hoy + 2 semanas "+addTimeToDate(2, 'w', hoy));
            printHr("Hoy - 2 semanas "+addTimeToDate(-2, 'w', hoy));                        

            printBr("Hoy + 5 mese "+addTimeToDate(5, 'M', hoy));
            printHr("Hoy - 5 meses  "+addTimeToDate(-5, 'M', hoy));            

            printBr("Hoy + 12 año  "+addTimeToDate(12, 'y', hoy));
            printHr("Hoy - 12 min  "+addTimeToDate(-12, 'y', hoy));

            /* Si se pasa como cuarto parámetro un true addTimetoDate usa el objetoDate
             * como referencia y modifica el objeto directamente,
             *  -*no crea un nuevo objeto Date
             **/
            printBr(hoy);
            addTimeToDate(5,'d',hoy,true);
            printBr(hoy);
            /*
             * Si se omite el cuarto parámetro o se pasa un false(por defecto)
             * addTimeToDate *crear un nuevo objeto* y opera sobre este dejando
             * intacto el objeto original, al final regresa el objetoDate temporal
             * o la referencia al objetDate original según se indico en el
             * tercer parámetro
             **/
        </script>
    </body>
</html>

Ver Ejemplo

Posted under: Funciones JavaScript


6 Responses to “addTimeToDate Sumar/Restar Tiempo a Fechas JavaScript”

  1. Japonés says:

    1.- Ante todo muchas gracias por publicar esta rutina tan elegante y útil. Me ha ido de perlas.

    2.- Hay un error, un “” que debería ser un “”

    3.- Supongo que ya sabrás que hacer copy/paste con esta rutina es un coñazo porque salen los numeritos y hay que quitarlos manualmente. Aún así, vale la pena porque la rutina es muy buena.

    Gracias por publicarla!! :)

  2. Japonés says:

    En el punto 2, no se ha publicado bien supongo que el filtro anti HTML de tu web se ha activado. lo escribiré de otra manera:

    Allá digo que hay una etiqueta “/di” que debería ser un “/div”.

    Saludos y nuevamente gracias.

  3. Japonés says:

    4.- Estaría bien que pusieses algunos ejemplos de utilización, porque para principiantes como yo, no es fácil adivinar los parámetros exactos de la función. O:)

  4. PakoS says:

    @Japonés, buenas observaciones, el objetivo de esta sección no es tanto enseñar, si no mas bien es una digamos base de datos de un montón de funciones o prototypos que utilizo en mis proyectos, muchas veces creas algo y ya luego no sabes donde lo dejaste cuando lo necesitas de nuevo y terminas creándolo nuevamente, por eso hice esta sección de Funciones JS, pero bien tratare de colocar ejemplos y un archivo de descarga en algunos otros ya lo Había colocado pero como este fue uno de los primeros post pues se me paso =), bueno que bueno que te sirvió y ojala le sirva a mas personas…

    además aproveche para actualizar la función, ahora tengo un parámetro de mas esto es para si no volveras a utilizar tu Date original pues solo le sumas o resta el tiempo al objeto directamente y ya no se crea un nuevo objeto esto para ayudar la optimización de memoria según como se requiera si sigues utilizando el Date original pues tal vez requieras crear uno nuevo

  5. Saludos, excelente aporte, muy util, felicidades.

  6. David says:

    Meha ido genial Trabajar con fecha en JS puede ser un verdadero dolor de cabeza. Muchisimas gracias.


Leave a Reply


*