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

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 );
Para evitar los problemas que puedan surgir, es recomendable comprobar si la fecha es válida antes de crearla.

Vea también: [ Crear una fecha en formato UTC ] - [ Validar una fecha ]

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.
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 />" );

Vea también: [ Obtener datos de fechas en formato UTC ] - [ Modificar Objetos en JavaScript ]
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 );

Vea también: [ Modificar fechas en formato UTC ]
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 />");
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 />");

Vea también: [ Expresiones regulares útiles ]