Saltar al contenido

ISO 8601 explicado: el formato de fecha internacional que todo desarrollador debería usar

Por qué YYYY-MM-DD es inequívoco, cómo el estándar gestiona semanas, duraciones e intervalos, y las razones por las que impulsa desde bases de datos hasta APIs JSON.

· 10 min de lectura · Gabriel

Escribir la fecha en formato ISO 8601
Índice de contenidos

El problema que ISO 8601 resuelve

¿Qué significa 03/04/05? En Estados Unidos es 4 de marzo de 2005. En la mayor parte de Europa es 3 de abril de 2005. En Japón es 5 de abril de 2003. Este tipo de ambigüedad ha causado contratos fallidos, vuelos perdidos, facturas duplicadas y al menos un famoso desastre de migración de base de datos. ISO 8601, publicado por primera vez en 1988 y revisado recientemente como ISO 8601-1:2019 y ISO 8601-2:2019, existe para acabar con todo eso.

El formato básico

La regla principal es simple: escribir las fechas como AAAA-MM-DD, siempre con cuatro dígitos de año y siempre con la unidad mayor primero. El formato se ordena correctamente como cadena, por lo que es el predeterminado en bases de datos, archivos de registro y nombres de archivo, y es el único formato de fecha que deberías almacenar.

Horas y fechas-hora combinadas

Las horas usan notación de 24 horas: HH:MM:SS. Una fecha y hora combinadas usan una "T" literal como separador: 2025-01-25T14:30:00. La zona horaria se añade con una "Z" para UTC o un desplazamiento con signo como +02:00. Un instante totalmente cualificado se ve así: 2025-01-25T14:30:00+01:00.

Fechas por semana

ISO 8601 también define un calendario basado en semanas que muchas empresas usan para informes fiscales. Las semanas empiezan el lunes. La semana 1 es la que contiene el primer jueves del año, equivalente a la semana que contiene el 4 de enero. Una fecha por semana se escribe como AAAA-Wss-D, por ejemplo 2025-W04-6. Por eso algunos años tienen 52 semanas ISO y otros 53.

Fechas ordinales

Un formato menos común pero útil es la fecha ordinal: AAAA-DDD, donde DDD es el día del año del 001 al 365 (o 366 en un año bisiesto). La NASA, los meteorólogos y la industria aérea las usan con frecuencia porque facilitan los cálculos por día del año.

Duraciones e intervalos

ISO 8601 también define una sintaxis para duraciones. Una duración comienza con la letra "P" (de "period") y usa designadores de una sola letra. Ejemplos:

  • P1Y — un año
  • P3M — tres meses
  • PT2H30M — dos horas y treinta minutos
  • P1Y2M10DT2H30M — un año, dos meses, diez días, dos horas y media

Un intervalo son dos fechas-hora separadas por una barra: 2025-01-01T00:00:00Z/2025-12-31T23:59:59Z. Un intervalo repetido lo prefija con R[n]/.

RFC 3339: el perfil de internet

La mayoría de los protocolos de internet no usan ISO 8601 directamente. Usan RFC 3339, una especificación de 2002 de Graham Klyne y Chris Newman que define un subconjunto estricto de ISO 8601 para marcas de tiempo en internet. RFC 3339 es lo que usan las APIs JSON, los archivos de registro, los tokens OAuth y las cabeceras de correo. Cualquier marca de tiempo RFC 3339 también es válida en ISO 8601.

Consejos prácticos para desarrolladores

  • Almacena siempre las marcas de tiempo en UTC. Convierte a hora local solo al mostrarlas al usuario.
  • Escribe siempre años de cuatro dígitos.
  • Usa AAAA-MM-DD en los nombres de archivo; se ordenan cronológicamente sin lógica adicional.
  • Si tu API devuelve una fecha, devuélvela como cadena ISO 8601 en UTC, no como timestamp Unix.
  • Analiza con una biblioteca real. Los analizadores con expresiones regulares hechas a mano acaban fallando.
  • Cuidado con el año-semana ISO. 2024-12-30 está en el año-semana ISO 2025.

Lecturas adicionales

  • ISO, "ISO 8601-1:2019 Date and time — Representations for information interchange — Part 1: Basic rules" (2019).
  • Klyne, G. y Newman, C., "Date and Time on the Internet: Timestamps", IETF RFC 3339 (julio 2002).

← Volver a todos los artículos