informaticaPC

Tutorial de JavaScript

Fechas en JavaScript

El Objeto Date()

Para usar fechas en JavaScript usaremos las propiedades y métodos que el objeto Date() pone a nuestra disposición, y que te describimos a continuación.

Crear una fecha

Hay cuatro formas de crear un objeto de tipo fecha usando el Objeto Date():

  • Escribiéndolo sin parámetros: devuelve la fecha y hora actual del sistema (la fecha y hora local).
  • Indicando el número de milisegundos desde las 12 de la madrugada del 1 de enero de 1970 (en formato horario UTC). Lo explicaremos más adelante.
  • Indicando la fecha usando una cadena de caracteres. Para que funcione correctamente en todos los navegadores web es importante que la escribas según el formato indicado en el siguiente ejemplo.
  • Escribiendo los parámetros en el siguiente orden: año, mes, día, hora, minutos, segundos y milisegundos (no es necesario especificarlos todos).
Información

En JavaScript los meses comienzan desde cero, por lo que se deberá tenerlo en cuenta si se solicita al usuario que introduzca una fecha.

var objFecha1 = new Date();
var objFecha2 = new Date("May 14, 2011");
var objFecha3 = new Date("May 14, 2011 20:21:22");
var objFecha4 = new Date(2011, 4, 14);
var objFecha5 = new Date(2011, 4, 14, 20, 21, 22);

// Devuelve la fecha actual, por ejemplo: "Mon May 16 13:52:40 UTC+0100 2011"
document.write( objFecha1 + "<br />" );

// Devuelve "Sat May 14 00:00:00 UTC+0100 2011"
document.write( objFecha2 + "<br />" );

// Devuelve "Sat May 14 20:21:22 UTC+0100 2011"
document.write( objFecha3 + "<br />" );

// Devuelve "Sat May 14 00:00:00 UTC+0100 2011"
document.write( objFecha4 + "<br />" );

// Devuelve "Sat May 14 20:21:22 UTC+0100 2011"
document.write( objFecha5 + "<br />" );

IMPORTANTE: si intentamos crear una fecha no válida, como sucede por ejemplo si intentamos añadir un día más a los que realmente contiene un determinado mes, se asignará la fecha más cercana:

// Creamos una fecha no válida (febrero del 2011 tiene sólo 28 días):
var objFecha = new Date(2011, 1, 29);

var dia  = objFecha.getDate();
var mes  = objFecha.getMonth();
var anio = objFecha.getFullYear();

// Devuelve: '1/2/2011':
document.write( dia + "/" + mes + "/" + anio );

Descargar ejemplo

Para evitar los problemas que puedan surgir, es recomendable comprobar si la fecha es válida antes de crearla.

Información

El texto de fecha mostrado variará dependiendo del navegador web usado: por ejemplo, la última de las fechas anteriores en Firefox mostraría Sat May 14 2011 20:21:22 GMT+0100 (Hora de verano GMT). En los ejemplos anteriores hemos usado Internet Explorer.

Obtener datos de una fecha

Con los siguientes métodos obtendremos datos acerca de una fecha creada usando el Objeto Date():

  • getDate(): devuelve el día del mes (1 a 31).
  • getDay(): devuelve el número del día de la semana: desde 0 (domingo) hasta 6 (sábado).
  • getFullYear(): cuatro dígitos del año.
  • getHours(): hora en formato 24h (0 a 23).
  • getMilliseconds(): milisegundos de la fecha especificada (0 a 999).
  • getMinutes(): devuelve los minutos (0 a 59).
  • getMonth(): devuelve el número del mes: desde 0 (enero) hasta 11 (diciembre).
  • getSeconds(): devuelve el número de segundos (0 a 59).
  • toLocaleDateString(): devuelve una cadena con la fecha completa, en formato de fecha local.
  • toLocaleTimeString(): devuelve una cadena con la hora completa, en formato de hora local.
var objFecha = new Date(2011, 4, 14, 20, 21, 22);

// Devuelve: "14/4/2011"
document.write( objFecha.getDate() + "/" + objFecha.getMonth() + "/" + objFecha.getFullYear() + "<br />" );

// Devuelve: "Sábado, 14 de mayo de 2011" (puede variar dependiendo del navegador web usado)
document.write( objFecha.toLocaleDateString() + "<br />" );

// Devuelve: "20:21:22"
document.write( objFecha.getHours()+ ":" + objFecha.getMinutes() + ":" + objFecha.getSeconds() + "<br />" );

// Devuelve: "20:21:22"
document.write( objFecha.toLocaleTimeString() + "<br />" );

Descargar ejemplo

Modificar fechas

Para modificar una fecha ya creada usaremos los siguientes métodos del Objeto Date():

  • setDate(): establece el día del mes (1 a 31).
  • setFullYear(): cuatro dígitos del año.
  • setHours(): hora en formato 24h (0 a 23).
  • setMilliseconds(): milisegundos de la fecha especificada (0 a 999).
  • setMinutes(): establece los minutos (0 a 59).
  • setMonth(): establece el mes (desde 0 hasta 11).
  • setSeconds(): establece el número de segundos (0 a 59).
var objFecha = new Date(2000, 1, 1, 12, 00, 00);

objFecha.setDate(14);
objFecha.setMonth(4);
objFecha.setFullYear(2011);
objFecha.setHours(20);
objFecha.setMinutes(21);
objFecha.setSeconds(22);

// Devuelve: "Sat May 14 20:21:22 UTC+0100 2011"
alert( objFecha );

Descargar ejemplo

Validar una fecha

A continuación te mostramos dos funciones con la que podremos validar una fecha.

Ambos ejemplos tienen en cuenta que los meses comienzan desde 1 en lugar desde 0 (como hace el Objeto Date() de JavaScript), y comprueban también si el año es bisiesto y el número de días que puede tener cada mes.

A la siguiente función de ejemplo debemos pasarle día, mes y año por separado como parámetros:

function validarFecha ( d, m, a )
{
    var ok = true;

    if( (a < 1900) || (a > 2050) || (m < 1) || (m > 12) || (d < 1) || (d > 31) )
       ok = false;
    else
    {
       if((a%4 != 0) && (m == 2) && (d > 28))
          ok = false;
       else
       {
          if( (((m == 4) || (m == 6) || (m == 9) || (m==11)) && (d>30)) || ((m==2) && (d>29)) )
             ok = false;
       }
    }

    return ok;
}

Para ejecutarla:

// Devuelve 'false' ya que febrero del 2011 tiene sólo 28 días:
document.write( validarFecha(29, 2, 2011) + "<br />");
// Devuelve 'true':
document.write( validarFecha(7, 10, 2010) + "<br />");

Descargar ejemplo

Esta otra función de ejemplo recibe como parámetro la fecha en una cadena de caracteres:

function esFecha( cadena )
{
    if( (trim(cadena) == "") || (trim(cadena).length != 10) )
        return false;

    var dia  = parseInt(cadena.substr(0,2), 10);
    var mes  = parseInt(cadena.substr(3,2), 10);
    var anio = parseInt(cadena.substr(6,4), 10);

    // Año
    if( isNaN(anio) || (anio < 1900) )
        return false;

    // Mes
    if( isNaN(mes) || (mes < 1) || (mes > 12) )
        return false;

    // Día
    if( isNaN(dia) || (dia < 1) || (dia > 31) )
        return false;
    else
    {
        if( (dia == 31) && ((mes == 4 ) || (mes == 6) || (mes == 9) || (mes == 11)) )
            return false;

        var diaMax = 31;

        if( (anio % 4 == 0) && (anio % 100 != 0) || (anio % 400 == 0) )
            diaMax = 29;
        else
            diaMax = 28;

        if( dia > diaMax )
            return false;
    }

    return true;
}

// -----------------------

// Elimina espacios al principio y fin de la cadena
function trim( cadena )
{
    cadena += "";
    cadena = cadena.replace(/^\s+/, '');
    return cadena.replace(/\s+$/, '');
}

Para ejecutarla:

// Devuelve 'false' ya que febrero del 2011 tiene sólo 28 días:
document.write( esFecha("29/02/2011") + "<br />");
// Devuelve 'true'
document.write( esFecha("07/10/2010") + "<br />");

Descargar ejemplo

Más información

Vea también: [ Expresiones regulares útiles ]

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso