RubyIntermedio29 oct 2025
El Calendario Mágico de Ruby: ¿Dónde está el 30 de Febrero?
snippet.ruby
require 'date'
invalid_date_string = "2024-02-30"
parsed_date = Date.parse(invalid_date_string)
puts parsed_date.to_s¿Qué crees que imprime?
✅ Salida Esperada
Error: invalid date, or nil⚠️ Salida Real
2024-03-01¿Por qué pasa esto?
¡Cuidado con el **calendario mágico** de Ruby! 🧙♀️ Cuando le das a `Date.parse` una fecha imposible como el 30 de febrero, uno esperaría un error (¡o al menos un ceño fruncido!). Pero no, Ruby no es de los que se rinden. En lugar de levantar una **excepción**, decide ser "útil" y **normaliza** la fecha. Es como si le pidieras a un amigo que te guarde un "unicornio azul" y él, en lugar de decirte que no existe, te trae un "caballo blanco" diciendo "es lo más parecido". 🦄
Este comportamiento de **rollover** convierte silenciosamente el 30 de febrero en el 1 de marzo. ¿Por qué? Porque `Date.parse` es **demasiado permisivo**. Suma los días extra al final del mes, provocando que la fecha "salte" al mes siguiente. Una `TypeError` sería más amable que un dato incorrecto. ¡Es una ayuda que no pedimos y que nos puede meter en un buen lío!
Conceptos relacionados
date-parsingimplicit-behaviornormalization