Estoy trabajando con datos DateTime que están almacenados en el año budista pero necesito convertirlos al año gregoriano.
En realidad, existe una solución simple (código a continuación).
{
"$dateSubtract": {
"startDate": {
"$dateFromString": {
"dateString": "$receive_date",
"format": "%d/%m/%Y %H:%M"
}
},
"unit": "year",
"amount": 543
}
}
Funciona la mayor parte del tiempo, pero arroja un error si receive_date es 29/2/2567 porque 2567 en el año gregoriano no es un año bisiesto pero sí en el año budista.
¿Tiene alguna sugerencia para resolver este problema?
El problema ocurre porque primero intentas convertir la fecha budista a un objeto Date y luego restar 543 años. Para fechas como 29/02/2567, MongoDB intenta interpretar inicialmente el año 2567 como gregoriano, y al restar años puede encontrarse con una fecha inválida.
Una alternativa más robusta es extraer el año de la cadena, restarle 543 antes de construir la fecha y luego volver a ensamblar el valor completo. De esta forma, MongoDB validará directamente la fecha en el calendario gregoriano correcto y evitarás inconsistencias relacionadas con años bisiestos durante la conversión.