Constructor Date()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

El constructor Date() crea objetos de tipo Date. Cuando se llama como una función, devuelve una cadena que representa la hora actual.

Pruébalo

Sintaxis

js
new Date()
new Date(value)
new Date(dateString)
new Date(dateObject)

new Date(year, monthIndex)
new Date(year, monthIndex, day)
new Date(year, monthIndex, day, hours)
new Date(year, monthIndex, day, hours, minutes)
new Date(year, monthIndex, day, hours, minutes, seconds)
new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)

Date()

Nota: > Date() se puede llamar con o sin new, pero con efectos diferentes. Ver el valor de retorno.

Parámetros

Hay cinco formas básicas para el constructor Date():

Sin parámetros

Cuando no se proporcionan parámetros, el objeto Date recién creado representa la fecha y hora actuales al momento de la instanciación. La marca de tiempo (timestamp) de la fecha devuelta es la misma que el número devuelto por Date.now().

Valor de tiempo o número de marca de tiempo

value

Un valor entero que representa la marca de tiempo (el número de milisegundos desde la medianoche al comienzo del 1 de enero de 1970, UTC — también conocido como el epoch).

Cadena de fecha

dateString

Un valor de cadena que representa una fecha, analizado e interpretado usando el mismo algoritmo implementado por Date.parse(). Ver el formato de cadena de fecha y hora para advertencias sobre el uso de diferentes formatos.

Objeto fecha

dateObject

Un objeto Date existente. Esto efectivamente hace una copia del objeto Date existente con la misma fecha y hora. Esto es equivalente a new Date(dateObject.valueOf()), excepto que no se llama al método valueOf().

Cuando se pasa un parámetro al constructor Date(), las instancias de Date se tratan de manera especial. Todos los demás valores se convierten a datos primitivos. Si el resultado es una cadena, se analizará como una cadena de fecha. De lo contrario, el valor primitivo resultante se convierte en un número y se trata como una marca de tiempo.

Valores individuales de componentes de fecha y hora

Dado al menos un año y un mes, esta forma de Date() devuelve un objeto Date cuyos valores de componentes (año, mes, día, hora, minuto, segundo y milisegundo) provienen de los siguientes parámetros. Cualquier campo faltante se le da el valor más bajo posible (1 para el día y 0 para todos los demás componentes). Los valores de los parámetros se evalúan en la zona horaria local, en lugar de UTC. Date.UTC() acepta parámetros similares pero interpreta los componentes como UTC y devuelve una marca de tiempo.

Si algún parámetro excede sus límites definidos, se "arrastra". Por ejemplo, si se pasa un monthIndex mayor que 11, esos meses harán que el año incremente; si se pasa un minutes mayor que 59, hours se incrementará en consecuencia, etc. Por lo tanto, new Date(1990, 12, 1) devolverá el 1 de enero de 1991; new Date(2020, 5, 19, 25, 65) devolverá las 2:05 AM del 20 de junio de 2020.

De manera similar, si algún parámetro esta por debajo, "toma prestado" de las posiciones superiores. Por ejemplo, new Date(2020, 5, 0) devolverá el 31 de mayo de 2020.

year

Valor entero que representa el año. Los valores de 0 a 99 se mapean a los años 1900 a 1999. Todos los demás valores son el año real. Ver el ejemplo.

monthIndex

Valor entero que representa el mes, comenzando con 0 para enero hasta 11 para diciembre.

day Opcional

Valor entero que representa el día del mes. Por defecto es 1.

hours Opcional

Valor entero entre 0 y 23 que representa la hora del día. Por defecto es 0.

minutes Opcional

Valor entero que representa el segmento de minutos de una hora. Por defecto es 0.

seconds Opcional

Valor entero que representa el segmento de segundos de una hora. Por defecto es 0.

milliseconds Opcional

Valor entero que representa el segmento de milisegundos de una hora. Por defecto es 0.

Valor de retorno

Llamar a new Date() (el constructor Date()) devuelve un objeto Date. Si se llama con una cadena de fecha no válida, o si la fecha que se va a construir tendrá una marca de tiempo menor a -8,640,000,000,000,000 o mayor a 8,640,000,000,000,000 milisegundos, devuelve una fecha no válida (un objeto Date cuyo método toString() devuelve "Invalid Date" y cuyo método valueOf() devuelve NaN).

Llamar a la función Date() (sin la palabra clave new) devuelve una representación en cadena de la fecha y hora actuales, exactamente como new Date().toString(). Cualquier argumento dado en una llamada a la función Date() (sin la palabra clave new) se ignora; independientemente de si se llama con una cadena de fecha no válida, o incluso se llama con cualquier objeto arbitrario u otro dato primitivo como argumento, siempre devuelve una representación en cadena de la fecha y hora actuales.

Descripción

Precisión de tiempo reducida

Para ofrecer protección contra ataques de sincronización y huellas digitales, la precisión de new Date() puede redondearse según la configuración del navegador. En Firefox, la preferencia privacy.reduceTimerPrecision está habilitada de forma predeterminada y el valor predeterminado es 2ms. También puedes habilitar privacy.resistFingerprinting, en cuyo caso la precisión será de 100ms o el valor de privacy.resistFingerprinting.reduceTimerPrecision.microseconds, el que sea mayor.

Por ejemplo, con precisión de tiempo reducida, el resultado de new Date().getTime() siempre será un múltiplo de 2, o un múltiplo de 100 (o privacy.resistFingerprinting.reduceTimerPrecision.microseconds) con privacy.resistFingerprinting habilitado.

js
// Precisión de tiempo reducida (2 ms) en Firefox 60
new Date().getTime();
// Podría ser:
// 1519211809934
// 1519211810362
// 1519211811670
// …

// Precisión de tiempo reducida con `privacy.resistFingerprinting` habilitado
new Date().getTime();
// Podría ser:
// 1519129853500
// 1519129858900
// 1519129864400
// …

Ejemplos

Varias maneras de crear un objeto Date

Los siguientes ejemplos muestran varias maneras de crear fechas en JavaScript:

js
const today = new Date();
const birthday = new Date("December 17, 1995 03:24:00"); // DESACONSEJADO: puede no funcionar en todos los entornos
const birthday = new Date("1995-12-17T03:24:00"); // Esto está estandarizado y funcionará de manera confiable
const birthday = new Date(1995, 11, 17); // el mes es indexado desde 0
const birthday = new Date(1995, 11, 17, 3, 24, 0);
const birthday = new Date(628021800000); // pasando marca de tiempo epoch

Pasando un valor que no es Date, ni cadena, ni número

Si el constructor Date() se llama con un parámetro que no es una instancia de Date, se convertirá a un dato primitivo y luego se verificará si es una cadena. Por ejemplo, new Date(undefined) es diferente de new Date():

js
console.log(new Date(undefined)); // Fecha no válida

Esto se debe a que undefined ya es un dato primitivo pero no una cadena, por lo que se convertirá a un número, que es NaN y, por lo tanto, no es una marca de tiempo válida. Por otro lado, null se convertirá a 0.

js
console.log(new Date(null)); // 1970-01-01T00:00:00.000Z

Los Arrays se convertirán en una cadena a través de Array.prototype.toString(), que une los elementos con comas. Sin embargo, la cadena resultante para cualquier arreglo con más de un elemento no es una cadena de fecha ISO 8601 válida, por lo que su comportamiento de análisis será definido por la implementación. No pases arreglos al constructor Date().

js
console.log(new Date(["2020-06-19", "17:13"]));
// 2020-06-19T17:13:00.000Z en Chrome, ya que reconoce  "2020-06-19,17:13"
// "Fecha no válida" en Firefox

Especificaciones

Specification
ECMAScript Language Specification
# sec-date-constructor

Compatibilidad con navegadores

BCD tables only load in the browser

Véase también