Command Palette

Search for a command to run...

Timestamps: getTime() y Date.now() en JavaScript

Aprende a trabajar con timestamps Unix para representar fechas como milisegundos desde 1970. Domina Date.now(), getTime() y cálculos de tiempo.

Lectura: 10 min
Nivel: Principiante

TL;DR - Resumen rápido

  • Date.now() es más eficiente que new Date().getTime() para timestamps actuales
  • getTime() devuelve números universales sin zona horaria, ideales para comparaciones
  • Date.UTC() devuelve timestamp numérico, NO objeto Date (usa new Date(Date.UTC(...)))
  • Timestamps facilitan aritmética: +86400000 ms = +1 día (sin preocuparse por límites de mes)
  • Precisión de milisegundos: usa Math.floor() al dividir para evitar decimales

Introducción a los Timestamps

Los timestamps son números simples que representan un momento exacto en el tiempo: milisegundos desde el 1 de enero de 1970 00:00:00 UTC (época Unix). Esta representación numérica es universal: libre de zona horaria, formato regional, o diferencias entre navegadores. Por esto, los timestamps son el formato preferido para almacenar fechas en bases de datos, transmitir en APIs REST, comparar fechas, y realizar cálculos matemáticos. Sumar 86400000 ms (1 día) a un timestamp es simple aritmética, mientras que sumar 1 día con métodos set requiere considerar horario de verano y cambios de mes.

JavaScript ofrece cuatro métodos principales para trabajar con timestamps: Date.now() (timestamp actual sin crear objeto), getTime() (convertir Date a timestamp), Date.UTC() (crear timestamp desde componentes UTC), y setTime() (establecer timestamp de un Date existente). Entender cuándo usar cada uno es crítico: Date.now() es más eficiente que new Date().getTime() para medir rendimiento, Date.UTC() previene bugs de zona horaria en aplicaciones globales.

  • Date.now() obtiene el timestamp actual sin crear objeto
  • getTime() obtiene el timestamp de un objeto Date
  • Date.UTC() crea timestamps en tiempo universal
  • setTime() establece el timestamp de un objeto Date
  • Los timestamps facilitan cálculos matemáticos con fechas

Época Unix

La época Unix es el 1 de enero de 1970 a las 00:00:00 UTC. Todos los timestamps en JavaScript se calculan desde este momento. Esta convención permite representar fechas anteriores y posteriores a 1970 como números positivos y negativos respectivamente.

Date.now(): Timestamp Actual

Date.now() devuelve el timestamp actual sin crear un objeto Date temporal. Es más eficiente que new Date().getTime() porque evita la asignación de memoria y garbage collection de un objeto Date. La diferencia de rendimiento es mínima en operaciones individuales, pero significativa cuando llamas miles de veces por segundo (ej: medición de rendimiento, rate limiting, generación de IDs). Usa Date.now() cuando solo necesitas el número, usa new Date() cuando necesitas acceder a componentes (año, mes).

date-now.js
Loading code...

Date.now() es perfecto para medir duración de operaciones, rate limiting, generar IDs únicos basados en tiempo, o comparar con timestamps guardados. No es adecuado para medir operaciones sub-milisegundos (usa performance.now() que tiene precisión de microsegundos) ni para operaciones que requieren precisión extrema afectada por ajustes del reloj del sistema.

Medir tiempo de ejecución

Para medir el tiempo de ejecución de una función, usa Date.now() antes y después de la función, y calcula la diferencia. Esto es más preciso que usar new Date() y getTime(), especialmente para operaciones que tardan menos de un milisegundo.

Ejemplo: Medir Rendimiento

Date.now() es ideal para medir el rendimiento de código, ya que proporciona una forma eficiente de obtener el tiempo actual sin crear objetos adicionales. Este patrón se usa comúnmente para medir la duración de operaciones y optimizar código.

medir-rendimiento.js
Loading code...

Este ejemplo demuestra cómo usar Date.now() para medir el tiempo de ejecución de una función. La diferencia entre el tiempo final y el tiempo inicial da la duración en milisegundos, que puedes convertir a segundos o minutos según necesites.

getTime(): Timestamp de un Objeto Date

El método getTime() devuelve el número de milisegundos desde la época Unix representado por el objeto Date. Este método es útil para convertir un objeto Date a su representación numérica, lo que facilita comparaciones y cálculos matemáticos con fechas.

gettime.js
Loading code...

El timestamp devuelto por getTime() es el mismo independientemente de la zona horaria, ya que representa un momento absoluto en el tiempo. Esto lo hace ideal para comparar fechas, calcular diferencias o almacenar fechas en bases de datos de forma consistente.

Comparación de fechas

Para comparar fechas, siempre usa getTime() o Date.now() en lugar de comparar los objetos Date directamente. Comparar objetos Date puede dar resultados inesperados debido a cómo JavaScript maneja la igualdad de objetos.

Calcular Diferencia entre Fechas

Usando getTime(), puedes calcular fácilmente la diferencia entre dos fechas en milisegundos. Esta diferencia puedes convertirla a segundos, minutos, horas o días según tus necesidades.

diferencia-fechas.js
Loading code...

Este ejemplo muestra cómo calcular la diferencia entre dos fechas usando getTime(). La diferencia en milisegundos se puede convertir a unidades más legibles como días, horas o minutos, lo que es útil para mostrar duraciones al usuario.

Date.UTC(): Crear Timestamps en UTC

El método Date.UTC() crea un timestamp en tiempo universal coordinado (UTC) basado en los componentes de fecha y hora proporcionados. A diferencia de crear un objeto Date con el constructor, Date.UTC() no crea un objeto Date sino que devuelve directamente el timestamp numérico.

date-utc.js
Loading code...

Date.UTC() es especialmente útil cuando necesitas crear fechas en UTC independientemente de la zona horaria del sistema. Los componentes de fecha y hora se interpretan en UTC, lo que garantiza consistencia en aplicaciones que manejan usuarios de múltiples zonas horarias.

Diferencia con new Date()

Date.UTC() devuelve solo el timestamp, mientras que new Date() crea un objeto Date. Si necesitas un objeto Date en UTC, usa el timestamp devuelto por Date.UTC() con el constructor new Date(timestamp).

Comparación: Date.UTC() vs Constructor

Es importante entender la diferencia entre Date.UTC() y el constructor Date con strings ISO. Ambos pueden crear fechas en UTC, pero tienen comportamientos diferentes que pueden afectar tu código.

comparacion-dateutc.js
Loading code...

Este ejemplo muestra cómo Date.UTC() y el constructor con strings ISO pueden crear fechas diferentes. Date.UTC() siempre interpreta los valores en UTC, mientras que el constructor puede interpretar strings según la zona horaria del sistema.

setTime(): Establecer Timestamp

El método setTime() establece el timestamp de un objeto Date, reemplazando todos los componentes de fecha y hora con un solo valor. Este método es útil cuando necesitas establecer una fecha específica desde un timestamp o cuando realizas cálculos matemáticos con fechas.

settime.js
Loading code...

El método setTime() modifica el objeto Date in-place y devuelve el nuevo timestamp. Esto permite encadenar operaciones o verificar que la modificación fue exitosa comprobando el valor de retorno. Es especialmente útil para copiar fechas o establecer fechas basadas en cálculos matemáticos.

Mutación in-place

setTime() modifica el objeto Date in-place, lo que significa que todas las referencias al mismo objeto reflejarán el cambio. Si necesitas mantener el original sin modificar, crea una copia usando new Date(fechaOriginal).

Cálculos con Timestamps

Los timestamps facilitan cálculos matemáticos con fechas, ya que puedes sumar, restar o multiplicar milisegundos para obtener nuevas fechas. Esto es mucho más simple que calcular manualmente los nuevos componentes de fecha y hora.

calculos-timestamps.js
Loading code...

Este ejemplo muestra cómo realizar cálculos comunes con fechas usando timestamps. Puedes sumar días, horas o minutos simplemente convirtiendo las unidades a milisegundos. Define estas constantes para hacer el código más legible:

  • <strong>1 segundo:</strong> 1000 milisegundos
  • <strong>1 minuto:</strong> 60000 milisegundos (60 * 1000)
  • <strong>1 hora:</strong> 3600000 milisegundos (60 * 60 * 1000)
  • <strong>1 día:</strong> 86400000 milisegundos (24 * 60 * 60 * 1000)

Usar constantes descriptivas (MS_POR_DIA, MS_POR_HORA) hace el código más legible que números mágicos como 86400000. JavaScript se encarga de ajustar automáticamente los componentes de fecha y hora cuando sumas o restas milisegundos.

Ejemplo: Sumar Días a una Fecha

Sumar días a una fecha es una operación común que se simplifica usando timestamps. En lugar de calcular manualmente el nuevo día, mes y año, puedes simplemente sumar los milisegundos correspondientes a los días.

sumar-dias.js
Loading code...

Este ejemplo muestra cómo sumar días a una fecha usando timestamps. JavaScript ajusta automáticamente el mes y año si es necesario, lo que hace que el código sea más simple y menos propenso a errores que calcular manualmente los componentes.

Errores Comunes con Timestamps

Al trabajar con timestamps, hay varios errores comunes que pueden causar bugs difíciles de detectar. Conocer estos patrones problemáticos te ayudará a escribir código más robusto y evitar problemas en producción.

Error: Pérdida de Precisión

Los timestamps tienen precisión de milisegundos, lo que significa que pueden representar fechas con una precisión de hasta 1/1000 de segundo. Sin embargo, ciertas operaciones pueden causar pérdida de precisión si no se manejan correctamente.

error-precision.js
Loading code...

Este ejemplo muestra cómo la división puede causar pérdida de precisión en los timestamps. Para evitar este problema, usa Math.round() o Math.floor() según tus necesidades, o trabaja con números enteros cuando sea posible.

Error: Confusión de Zona Horaria

Los timestamps son independientes de la zona horaria, lo que significa que representan el mismo momento en el tiempo sin importar dónde te encuentres. Sin embargo, al convertir timestamps a objetos Date, la zona horaria puede causar confusión.

error-zona-horaria.js
Loading code...

Este ejemplo muestra cómo el mismo timestamp puede representar fechas diferentes dependiendo de la zona horaria. Para consistencia, usa Date.UTC() cuando crees fechas que deben ser independientes de la zona horaria del usuario.

Error: Overflow de Timestamp

Los timestamps tienen límites de representación. Los valores positivos máximos pueden representar fechas hasta aproximadamente el año 285616, mientras que los valores negativos pueden representar fechas hasta aproximadamente el año 271821 antes de Cristo.

error-overflow.js
Loading code...

Este ejemplo muestra cómo JavaScript maneja timestamps extremos. En la mayoría de los casos prácticos, no necesitas preocuparte por estos límites, pero es importante conocerlos cuando trabajas con fechas muy lejanas en el futuro o en el pasado.

Resumen: Timestamps en JavaScript

Conceptos principales:

  • Los timestamps son milisegundos desde 1970-01-01
  • Date.now() obtiene el timestamp actual sin crear objeto
  • getTime() obtiene el timestamp de un objeto Date
  • Date.UTC() crea timestamps en tiempo universal
  • setTime() establece el timestamp de un objeto Date
  • Los timestamps facilitan cálculos matemáticos con fechas

Mejores prácticas:

  • Usa Date.now() para medir tiempos de ejecución
  • Usa getTime() para comparar fechas
  • Usa Date.UTC() para fechas independientes de zona horaria
  • Define constantes para conversiones de tiempo
  • Valida timestamps extremos antes de usarlos