es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo le indico al analizador de fechas y horas de PHP que quiero la fecha “siguiente” en lugar de necesariamente “la fecha del año actual”?

Obtengo datetime estúpidos como este desde el exterior:

Jan-02 19:00

Eso significa “el próximo 2 de enero, a las 19 horas”.

Actualmente, dado que la hora actual es a finales de 2021, eso significa 2022-01-02 19:00. Pero si envío eso al analizador de datetime en PHP, pensará que estoy hablando del “2 de enero” del año actual, es decir, 2021-01-02 19:00. Eso ya está en el pasado.

Yo nunca daría un datetime sin año, pero no controlo esto. También es imposible contactarlos y hacer que cambien algo.

Esto probablemente sea extremadamente simple, pero me ha causado problemas durante años cuando el formateador de fechas interpreta erróneamente la fecha como si se refiriera al pasado, cuando siempre significa “la próxima vez que esta fecha ocurra a partir de la hora actual”.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, una posible solución es utilizar la clase DateTime en PHP para analizar la cadena de fecha y hora y luego verificar si la fecha analizada ya ha pasado. Si es así, se agrega un año a la fecha para obtener la próxima ocurrencia de la misma fecha. Aquí hay un ejemplo de código que demuestra este enfoque:

    $dateStr = 'Jan-02 19:00';
    $dateTime = DateTime::createFromFormat('M-d H:i', $dateStr);
    
    // Verificar si la fecha analizada ya ha pasado este año
    if ($dateTime < new DateTime()) {
        // Si es así, agregar un año para obtener la próxima ocurrencia de la misma fecha
        $dateTime->modify('+1 year');
    }
    
    // El objeto datetime resultante debería ser la próxima ocurrencia de la fecha dada
    echo $dateTime->format('Y-m-d H:i');
    

    Con este código, la cadena de fecha y hora 'Jan-02 19:00' se analizaría inicialmente como 2021-01-02 19:00, pero debido a que esa fecha y hora ya ha pasado este año, el código le agregará un año y devolverá 2022-01-02 19:00, que es la próxima ocurrencia de la misma fecha.

Comments are closed.