Soporte » Plugins y Hacks » Hacks » Problemas con date_i18n();

  • Resuelto Ibon Azkoitia

    (@ibonazkoitia)


    Muy buenos días jóvenes, hoy vengo a consultaros una duda/problema que tengo con la función date_i18n().

    La idea: una lista con los próximos «eventos» donde ponga:
    – Título: «Proximamente:»
    – Fecha: «XX de xxxx»
    – Nombre: «Evento 1»

    Y cuando el evento sea «hoy»:
    – Título: «Hoy:»
    – Fecha -> Hora: «00:00»
    – Nombre: «Evento 1»

    Solución pensada:
    – Un «if» que compara el día de hoy con el día del evento
    – Si es igual, entonces se muestra «Hoy:» y en vez de mostrar la fecha (día y mes) se muestra la hora.

    Problema:
    – En la parte del «if» de hoy, la hora me pone la hora actual en este momento, no la del evento
    – Cuando pongo la función mostrar la hora en «próximo» (en vez del día), entonces me muestra bien la hora del evento (no me muestra la hora actual)
    – Esto es, solo se muestra mal la hora del evento dentro del «if» (ni en «else» ni fuera), muestra la hora actual y no la hora correcta.

    Resultado que arroja:

    HOY:
    Hoy: 23/08/2019
    Hoy formateado: 23 de agosto
    Fecha evento: 23/08/2019 4:00 pm
    Fecha evento formateado: 23 de agosto
    Hora evento formateado: 08:51
    08:51 | SesionSWP

    PROXIMAMENTE
    Hoy: 23/08/2019
    Hoy formateado: 23 de agosto
    Fecha evento: 09/09/2019 7:00 pm
    Fecha evento formateado: 9 de septiembre
    Hora evento formateado: 19:00
    19:00 | Webinar

    Código utilizado:

    if ( have_rows( 'ahora_swp', 'option' ) ) :
    
        echo '<div id="swp-now">';
    
          echo '<ul>';
    
        while ( have_rows( 'ahora_swp', 'option' ) ) : the_row();
    
            $name = get_sub_field( 'ahora_swp_nombre' );
            $url  = get_sub_field( 'ahora_swp_enlace' );
    
            $today        = current_time( 'd/m/Y' ); // Get the current time.
            $today_output = date_i18n( 'j \d\e F', strtotime( $today ) );
    
            $event_day         = get_sub_field( 'ahora_swp_fecha' );
            $event_day_output  = date_i18n( 'j \d\e F', strtotime( $event_day ) );
            $event_time_output = date_i18n( 'H:i', strtotime( $event_day ) );
    
            echo '<li>';
    
          if ( $event_day_output === $today_output ) {
    
              echo '<h4>Hoy:</h4>';
              echo '<span>' . esc_html( $event_time_output ) . '</span> | <a href="' . esc_url( $url ) . '" title="Ver ' . esc_html( $name ) . '">' . esc_html( $name ) . '</a>';
    
          } else {
    
              echo '<h4>Proximamente:</h4>';
              echo '<span>' . esc_html( $event_time_output ) . '</span> | <a href="' . esc_url( $url ) . '" title="Ver ' . esc_html( $name ) . '">' . esc_html( $name ) . '</a>';
    
          }
    
            echo '</li>';
    
        endwhile;
    
          echo '</ul>';
    
        echo '</div> <!-- #swp-now -->';
    
      endif;

    ——

    Muchas gracias.

    • Este debate fue modificado hace 3 semanas, 6 días por  Ibon Azkoitia.
    • Este debate fue modificado hace 3 semanas, 6 días por  Ibon Azkoitia.
    • Este debate fue modificado hace 3 semanas, 6 días por  Ibon Azkoitia.
    • Este debate fue modificado hace 3 semanas, 6 días por  Ibon Azkoitia.
Viendo 5 respuestas - 1 de 5 (de 5 total)
  • Moderador LGrusin

    (@lgrusin)

    Creo recordar (hablo de memoria) que date_i18n no acepta H:i prueba con date

    Hola LGrusin 🙂

    La cosa es que esa misma función y variable «$event_time_output» funciona perfectamente cuando no está dentro del «if» (ya sea en el else o fuera)

    Por lo que realmente no es que no funcione con date_i18n, si no que algo le tiene que hacer el if para que no funcione, y no sé el qué.

    Moderador LGrusin

    (@lgrusin)

    Pues mira me ha dado por probar tu código exactamente como está y me funciona bien. Eso si falta por mostrar la fecha y la hora, no la hora únicamente en Próximamente.

    Supongo que en la fecha del evento estás poniendo la fecha y la hora. ¿Qué formato usas para la fecha y la hora? Revisa bien eso…

    Hola 🙂

    He realizado este vídeo para que veas el problema:
    https://www.loom.com/share/cb5f5f7c9eb949a08ad439d4a2e823d0

    Y lo he solucionado de la siguiente manera:
    – No he usado la función date_i18n por los problemas que ves en el vídeo
    – He cogido el string del día y hora del evento, le he realizado un substr() quitándole la primera parte del día y mes y dejando solo la hora final.
    – Como la función del día y mes funciona bien, lo dejo tal cual. Si veo que me falla en un futuro, pues le hago lo mismo y listo.

    $event_day = get_sub_field( 'ahora_swp_fecha' ); // devuelve: "XX/XX/XXXX XX:XX"
    $event_time = substr( $event_day, 11 ); // devuelve: "XX:XX"

    Saludos!

    Moderador LGrusin

    (@lgrusin)

    Nada, creo que el problema lo tienes en el formato de la hora, eso de pm am. Yo he usado formato de 24 horas.

    Si pudieras probar un formato personalizado en el que puedas poner 24 horas saldríamos de dudas.

    En la prueba que hice la fecha y la hora no tenían el mismo formato que devuelve $event_day_output con lo que la comparación no era posible, por eso insisto en esa parte.

Viendo 5 respuestas - 1 de 5 (de 5 total)
  • Debes estar registrado para responder a este tema.