Publicado el 03/05/2026 146 visitas KW: convertir unix timestamp a fecha javascript zona horaria

Cómo convertir Unix Timestamp a fecha en JavaScript (con zona horaria y UTC)

Cómo Convertir un Unix Timestamp a Fecha en JavaScript con Zona Horaria Trabajar con fechas y horas en el mundo digital es fundamental, y a menudo nos enc

Cómo Convertir un Unix Timestamp a Fecha en JavaScript con Zona Horaria

Trabajar con fechas y horas en el mundo digital es fundamental, y a menudo nos encontramos con la necesidad de convertir un Unix timestamp a una fecha legible en JavaScript. Este artículo te guiará a través del proceso, asegurando que entiendas cómo manejar las zonas horarias y obtener resultados precisos. Te mostraremos cómo transformar esos números en información útil para tus usuarios, sin importar dónde se encuentren.

Entendiendo el Unix Timestamp: El Punto de Partida

El Unix timestamp, también conocido como "tiempo de época" o "timestamp en segundos desde la época Unix", es una forma estándar para rastrear un punto en el tiempo. Representa el número de segundos que han transcurrido desde el 1 de enero de 1970 a las 00:00:00 UTC (Coordinated Universal Time). Es una forma universal de representar un momento en el tiempo, lo que lo hace ideal para el almacenamiento y la transmisión de datos temporales entre diferentes sistemas y plataformas.

¿Por qué Usar Unix Timestamps?

El uso de Unix timestamps ofrece varias ventajas:

  • Universalidad: Son interpretados de la misma manera por todos los sistemas, independientemente de la configuración regional o la zona horaria.
  • Facilidad de almacenamiento: Ocupan menos espacio que las representaciones de fecha y hora en formato de texto.
  • Simplicidad de cálculo: Permiten realizar fácilmente cálculos de diferencia temporal (ej: cuánto tiempo ha transcurrido entre dos eventos).

Un Ejemplo Sencillo

Imagina que recibes el timestamp `1678886400`. Este número representa una fecha específica. Más adelante, veremos cómo convertirlo en una fecha legible.

De Segundos a Milisegundos: La Clave de JavaScript

JavaScript utiliza internamente milisegundos para representar las fechas. Por lo tanto, es crucial entender la diferencia entre segundos y milisegundos cuando trabajas con Unix timestamps.

Importante: Si tu timestamp está en segundos (lo más común al recibir datos de APIs, bases de datos o sistemas heredados), deberás convertirlo a milisegundos antes de usarlo en JavaScript. Para ello, simplemente multiplica el valor por 1000.


const timestampEnSegundos = 1678886400; // Ejemplo: 15 de marzo de 2023
const timestampEnMilisegundos = timestampEnSegundos * 1000;
console.log(timestampEnMilisegundos); // Output: 1678886400000

Creando un Objeto `Date`: El Primer Paso en JavaScript

Una vez que tienes el timestamp en milisegundos, puedes crear un objeto `Date` en JavaScript. Este objeto es la base para trabajar con fechas y horas. Representa la fecha y hora correspondientes al timestamp proporcionado.

El constructor `new Date()` en JavaScript es versátil y acepta varios formatos de entrada, incluyendo el timestamp en milisegundos.


const timestampEnSegundos = 1678886400;
const timestampEnMilisegundos = timestampEnSegundos * 1000;
const fecha = new Date(timestampEnMilisegundos);
console.log(fecha); // Output: Tue Mar 15 2023 00:00:00 GMT+0000 (Coordinated Universal Time)

La salida en la consola, por defecto, mostrará la fecha en la zona horaria del entorno donde se ejecuta el código (normalmente la zona horaria del navegador o del sistema operativo). Esto puede ser útil para propósitos de depuración, pero no es la mejor manera de presentar la fecha al usuario final.

Formateando la Fecha con `Intl.DateTimeFormat`: Control Total de la Zona Horaria

Para mostrar la fecha en una zona horaria específica y con el formato deseado, es crucial utilizar el objeto `Intl.DateTimeFormat`. Esta API de JavaScript te proporciona un control preciso sobre cómo se muestra la fecha y hora, incluyendo la zona horaria, el idioma y el formato de visualización.

¿Por qué `Intl.DateTimeFormat` es tan importante?

  • Control de la zona horaria: Te permite especificar la zona horaria en la que quieres que se muestre la fecha, lo que es esencial para aplicaciones globales.
  • Personalización del formato: Puedes elegir el formato de fecha y hora que mejor se adapte a las necesidades de tus usuarios (ej: 'dd/mm/yyyy', 'mm/dd/yyyy', etc.).
  • Internacionalización (i18n): Facilita la adaptación de la fecha y hora a diferentes idiomas y regiones.

Aquí tienes un ejemplo práctico:


const timestampEnSegundos = 1678886400;
const timestampEnMilisegundos = timestampEnSegundos * 1000;
const fecha = new Date(timestampEnMilisegundos);

const opcionesDeFormato = {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  timeZone: 'Europe/Madrid' // Especifica la zona horaria deseada
};

const formato = new Intl.DateTimeFormat('es-ES', opcionesDeFormato);
const fechaFormateada = formato.format(fecha);

console.log(fechaFormateada); // Output: 15/03/2023 01:00:00 (si el huso horario es UTC+1)

Analicemos este código paso a paso:

  • `'es-ES'`: Especifica el idioma (español) y la región (España). Esto afecta al formato de fecha y a los nombres de los meses y días.
  • `opcionesDeFormato`: Un objeto que define cómo se mostrará la fecha y hora. Puedes personalizar:
    • `year`: 'numeric' (ej: 2023), '2-digit' (ej: 23)
    • `month`: 'numeric' (ej: 3), '2-digit' (ej: 03), 'long' (ej: marzo), 'short' (ej: mar), 'narrow' (ej: M)
    • `day`: 'numeric' (ej: 15), '2-digit' (ej: 15)
    • `hour`: 'numeric', '2-digit'
    • `minute`: 'numeric', '2-digit'
    • `second`: 'numeric', '2-digit'
    • `timeZone`: La zona horaria (ej: 'America/Los_Angeles', 'Asia/Tokyo', etc.). Consulta la lista de zonas horarias de IANA para obtener los valores correctos.
  • `formato.format(fecha)`: Aplica el formato definido a la fecha.

Mostrando la Fecha en UTC: Una Perspectiva Global

En ciertas situaciones, es fundamental mostrar la fecha y hora en UTC (Tiempo Universal Coordinado). UTC es un estándar de tiempo global, lo que significa que no se ve afectado por las zonas horarias ni por los cambios de horario de verano. Esto es especialmente útil para el almacenamiento de datos, la sincronización entre sistemas y la presentación de información relacionada con eventos globales.

JavaScript proporciona el método `toISOString()` para obtener la representación de una fecha en formato UTC ISO 8601.


const timestampEnSegundos = 1678886400;
const timestampEnMilisegundos = timestampEnSegundos * 1000;
const fecha = new Date(timestampEnMilisegundos);
const fechaUTC = fecha.toISOString();

console.log(fechaUTC); // Output: 2023-03-15T00:00:00.000Z

El formato ISO 8601 es `YYYY-MM-DDTHH:mm:ss.sssZ`, donde:

  • `YYYY`: Año
  • `MM`: Mes
  • `DD`: Día
  • `T`: Separador de fecha y hora
  • `HH`: Hora
  • `mm`: Minutos
  • `ss`: Segundos
  • `.sss`: Milisegundos
  • `Z`: Indica que la hora está en UTC (o 'Zulu' time).

Checklist: Tu Guía Rápida para la Conversión

Para asegurar que sigues todos los pasos correctamente y evitas errores, utiliza esta lista de verificación:

  • [ ] Obtén el Unix timestamp: Asegúrate de tener el timestamp en segundos.
  • [ ] Verifica la unidad: Determina si el timestamp está en segundos o milisegundos.
  • [ ] Convierte a milisegundos (si es necesario): Si el timestamp está en segundos, multiplícalo por 1000.
  • [ ] Crea el objeto `Date`: Usa `new Date(timestampEnMilisegundos)` para crear un objeto `Date`.
  • [ ] Utiliza `Intl.DateTimeFormat`: Crea una instancia de `Intl.DateTimeFormat` para formatear la fecha.
  • [ ] Configura las opciones de formato: Define el idioma, el formato de fecha y hora, y la zona horaria en el objeto de opciones de `Intl.DateTimeFormat`.
  • [ ] Aplica el formato: Usa `formato.format(fecha)` para obtener la fecha formateada.
  • [ ] Considera UTC (si es necesario): Usa `toISOString()` si necesitas la fecha en formato UTC.

Errores Comunes y Cómo Evitarlos

A pesar de la aparente simplicidad, es fácil cometer errores al convertir timestamps. Aquí tienes los más comunes y cómo solucionarlos:

1. Confundir Segundos y Milisegundos

Error: El error más común es usar directamente el timestamp en segundos sin multiplicarlo por 1000. Esto resultará en una fecha incorrecta, generalmente mostrando el 1 de enero de 1970.

Solución: Siempre verifica si el timestamp está en segundos o milisegundos. Multiplica por 1000 si está en segundos.


const timestampEnSegundos = 1678886400;
const timestampEnMilisegundos = timestampEnSegundos * 1000;
const fecha = new Date(timestampEnMilisegundos); // Correcto

2. No Considerar la Zona Horaria

Error: Asumir que el objeto `Date` por defecto mostrará la fecha en la zona horaria deseada. JavaScript utiliza la zona horaria del navegador o entorno donde se ejecuta el código.

Solución: Utiliza `Intl.DateTimeFormat` para especificar la zona horaria y el formato de fecha y hora. Sin esto, la fecha se mostrará en la zona horaria predeterminada del navegador, lo que puede llevar a confusión.

3. Olvidar el Formato Correcto

Error: No formatear la fecha para que sea legible. El objeto `Date` por sí solo no muestra la fecha en un formato amigable para el usuario.

Solución: Usa `Intl.DateTimeFormat` para formatear la fecha y hora de la manera que necesites. Aplica el formato correcto para mostrar la fecha y hora de forma clara y comprensible.

4. Manejo Incorrecto de UTC

Error: Mostrar la fecha directamente sin considerar UTC cuando se requiere. Esto puede llevar a inconsistencias si necesitas comparar o almacenar fechas entre diferentes sistemas.

Solución: Usa `toISOString()` para obtener la fecha en formato UTC. Si estás trabajando con datos que se almacenan en diferentes zonas horarias, convertir a UTC antes de guardar es una buena práctica.

Preguntas Frecuentes (FAQ)

¿Cómo puedo convertir una fecha ISO 8601 a Unix timestamp en JavaScript?

Puedes usar `Date.parse()` para convertir la fecha ISO 8601 a milisegundos y luego dividir por 1000 para obtener el timestamp en segundos. Ten en cuenta que `Date.parse()` puede no ser compatible con todos los formatos ISO 8601, por lo que es recomendable usar bibliotecas como Moment.js o date-fns para un manejo más robusto.


const fechaISO = "2023-03-15T10:30:00Z";
const milisegundos = Date.parse(fechaISO);
const segundos = Math.floor(milisegundos / 1000);
console.log(segundos); // Output: 1678895400

¿Cómo puedo obtener el Unix timestamp actual en JavaScript?

Puedes usar `Date.now()` para obtener el timestamp actual en milisegundos y luego dividir por 1000 para obtener los segundos, o usar `Math.floor(Date.now() / 1000)` para los segundos. Esto te permite obtener la hora actual del sistema.


const timestampEnMilisegundos = Date.now();
const timestampEnSegundos = Math.floor(timestampEnMilisegundos / 1000);
console.log(timestampEnSegundos);

¿Por qué mi fecha se muestra incorrectamente en diferentes zonas horarias?

Esto ocurre porque el objeto `Date` en JavaScript usa la zona horaria del navegador o entorno. Necesitas usar `Intl.DateTimeFormat` para especificar la zona horaria que deseas. Asegúrate de configurar la propiedad `timeZone` en las opciones de formato.

¿Cómo puedo mostrar la hora en formato de 12 horas (AM/PM)?

Debes usar las opciones de formato de `Intl.DateTimeFormat` para especificar el formato de hora. Por ejemplo:


const fecha = new Date();
const opciones = {
  hour: 'numeric',
  minute: 'numeric',
  hour12: true // Para formato de 12 horas
};
const formato = new Intl.DateTimeFormat('en-US', opciones);
const fechaFormateada = formato.format(fecha);
console.log(fechaFormateada);

¿Cómo puedo calcular la diferencia entre dos fechas dadas por timestamps?

Convierte ambos timestamps a objetos `Date`. Luego, puedes restar un objeto `Date` de otro para obtener la diferencia en milisegundos. Puedes convertir esa diferencia a segundos, minutos, horas, días, etc., según tus necesidades.


const timestamp1 = 1678886400; // 15 de marzo de 2023
const timestamp2 = 1679059200; // 17 de marzo de 2023

const fecha1 = new Date(timestamp1 * 1000);
const fecha2 = new Date(timestamp2 * 1000);

const diferenciaEnMilisegundos = fecha2.getTime() - fecha1.getTime();
const diferenciaEnDias = diferenciaEnMilisegundos / (1000 * 60 * 60 * 24);

console.log(`Diferencia en días: ${diferenciaEnDias}`);

Conclusión

Convertir y formatear Unix timestamps a fechas legibles en JavaScript, considerando las zonas horarias, es una habilidad esencial para cualquier desarrollador web. Al comprender el proceso y aplicar las técnicas presentadas, puedes garantizar que tus aplicaciones muestren la información de fecha y hora de forma precisa y adaptada a las necesidades de tus usuarios, sin importar dónde se encuentren.

Enlaces internos

Autor: Equipo Tecno Inteligente
Especialistas en automatización, desarrollo web y herramientas digitales.

Artículos recomendados