Analizador de portabilidad de cadenas de fecha
Pega una fecha o marca de tiempo (o un fragmento completo de registro) y descubre qué valores interpretarían de forma distinta —o rechazarían— `Date` de JavaScript, Python y otros analizadores habituales, y por qué.
El análisis se realiza localmente en tu navegador. El archivo nunca se carga al servidor.
Cómo usar esta herramienta
- Pega una fecha o un bloque de texto más largo con fechas; los datos no salen de tu navegador.
- Selecciona «Analizar fechas».
- Revisa cada valor señalado: qué lo hace ambiguo o arriesgado y en qué entornos hay discrepancias.
- Usa la conversión sugerida a ISO 8601 cuando se ofrezca. Algunas ambigüedades no se pueden resolver automáticamente; se explican en vez de adivinarlas.
Supuestos
- Reconoce cinco formas concretas de fecha/hora: una fecha-hora ISO 8601 completa (con o sin desplazamiento), una fecha simple YYYY-MM-DD (con o sin ceros de relleno), una fecha con guiones y año de dos cifras, y una fecha separada por barras. Las fechas en lenguaje natural ("March 3rd"), las marcas de tiempo Unix y otros formatos locales quedan fuera del alcance.
- El orden día/mes de una fecha con barras solo se infiere cuando los números lo determinan (uno de los componentes es mayor que 12). Si ambos pueden ser meses, se informa de la ambigüedad en vez de elegir uno silenciosamente.
- Nunca se infiere el siglo de un año de dos cifras, aunque existan convenciones comunes, porque varían realmente entre entornos y bibliotecas.
Fuentes y datos de referencia
Metodología
Cada subcadena parecida a una fecha se clasifica por su forma y se compara con discrepancias conocidas de `Date` de JavaScript, Python y analizadores estrictos (incluidos algunos motores SQL): medianoche implícita UTC frente a local para fechas sin hora, interpretación local frente a UTC para fechas-hora sin desplazamiento, inferencia de siglo para años de dos cifras y rechazo de componentes sin ceros iniciales por analizadores estrictos. Solo se propone una conversión ISO 8601 inequívoca; nunca se adivina.
Ejemplo resuelto
Fecha ambigua separada por barras
Datos de entrada: 01/02/2024
Resultado: Tanto 1 como 2 son meses válidos; según la convención, puede significar 2 de enero o 1 de febrero. Se señala como error y no se ofrece conversión automática: adivinar el orden sería peor que dejar visible el problema.
Cadena ISO que solo contiene una fecha
Datos de entrada: 2024-01-15
Resultado: `new Date("2024-01-15")` de JavaScript la interpreta como medianoche UTC, pero otros lenguajes y la forma `new Date(year, month, day)` de JavaScript interpretan una fecha simple como medianoche local. En una zona horaria al oeste de UTC puede resultar un día calendario distinto. Se advierte del riesgo; ya es ISO 8601 válida y no se convierte.
Fecha sin ceros de relleno
Datos de entrada: 2024-1-5
Resultado: JavaScript y Python la aceptan de forma permisiva, pero algunos analizadores estrictos de fechas SQL la rechazan. Se convierte de forma segura a 2024-01-05.
Orientación práctica
- Incluye siempre un desplazamiento UTC explícito (o "Z") en toda marca de tiempo con hora que cruce límites entre sistemas: es la forma fiable de eliminar ambigüedades.
- No generes años de dos cifras en el código que controlas: las reglas para inferir el siglo varían entre entornos y, una vez truncado el año, no se puede corregir al leerlo.
- Prefiere ISO 8601 ("YYYY-MM-DD" o fecha-hora completa con desplazamiento) para fechas que leerá más de un sistema, incluso otra versión de tu propio código.
Errores comunes
- Dar por hecho que «la fecha se analizó sin error» significa que se interpretó correctamente: en todos los casos ambiguos que detecta esta herramienta, los entornos pueden analizarla correctamente y obtener valores distintos.
- Suponer que una cadena `YYYY-MM-DD` es segura frente a zonas horarias solo porque parece ISO 8601. El formato es inequívoco como texto, pero su significado como instante depende de cómo el analizador complete la hora ausente.
Preguntas frecuentes
¿Por qué 01/02/2024 es un error y 25/12/2024 solo es informativo?
En 01/02/2024, tanto 1 como 2 son números de mes válidos, así que no se puede determinar el orden solo con la cadena. En 25/12/2024, 25 no puede ser un mes y el orden día/mes queda determinado. No es ISO 8601, pero no es ambiguo, por lo que se clasifica con menor gravedad y puede convertirse automáticamente.
¿Por qué no se supone que un año de dos cifras como "24" significa 2024?
Es probable, pero algunos sistemas interpretan la misma cadena como 1924 y otros como 2024 según la convención de siglo que implementan. Esta herramienta no adivina silenciosamente cuando una suposición equivocada sería peor que no hacerla.
¿Es realmente insegura una fecha simple como 2024-01-15?
El riesgo concierne al instante que representa al leerla con `Date` de JavaScript frente a la mayoría de los otros analizadores: JavaScript trata una fecha sin hora como UTC, mientras que muchos otros lenguajes la tratan como hora local. Como texto o dato almacenado es totalmente segura; el riesgo aparece cuando se convierte en un objeto de fecha y se consulta qué instante representa.
¿Por qué `new Date('2024-01-15')` puede mostrar el día anterior?
ECMAScript interpreta la forma ISO que solo contiene fecha como medianoche UTC. En una zona horaria al oeste de UTC, al mostrar ese instante en hora local puede corresponder al día calendario anterior. Es distinto de construir la medianoche local o tratar el valor como fecha sin zona horaria; este comprobador explica el riesgo según la forma, pero no ejecuta analizadores de otros entornos.
Última revisión:
Este es un detector limitado basado en formas, no un analizador de fechas completo: reconoce cinco patrones concretos de fecha/hora y nada más. No detecta fechas en lenguaje natural, marcas de tiempo Unix ni formatos locales inusuales. Tampoco puede saber qué fecha se pretendía expresar en un caso realmente ambiguo; informa de la ambigüedad en lugar de resolverla.
Las preferencias de tema y de herramientas, junto con las listas de herramientas guardadas y recientes, se almacenan solo en este navegador.