Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

238
Vistas
El formato de fecha devuelve un año incorrecto en PHP con DateFmt en francés

Escribí esta función

 function formatted_month($month) { $first_day_in_month = new DateTime('2022-01-01'); $fmt = datefmt_create( 'en_EN', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Paris', IntlDateFormatter::GREGORIAN, 'MMMM YY' ); $formatted_month = datefmt_format($fmt,$first_day_in_month); return $formatted_month; }

Este regreso el 22 de enero como se esperaba, pero este código:

 function formatted_month($month) { $first_day_in_month = new DateTime('2022-01-01'); $fmt = datefmt_create( 'fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Paris', IntlDateFormatter::GREGORIAN, 'MMMM YY' ); $formatted_month = datefmt_format($fmt,$first_day_in_month); return $formatted_month; }

Devuelve el 21 de enero. La única diferencia es esta línea.

 'en_EN', -> 'fr_FR'

Lo mismo para es_ES y los idiomas distintos del inglés...

¿Tienes alguna explicación? Gracias

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Este es un error sutil de la cadena de formato, que es que hay varios especificadores de año diferentes:

  • Un yy o yyyy en minúsculas es el año normal que esperaría, para usar con el mes y el día.
  • Un YY o YYYY en mayúsculas es el año para usar con "semana del año"

Para la mayoría de las fechas, estas son las mismas, por lo que es fácil pasar por alto la diferencia. Pero al principio y al final del año, importa dónde comienza y termina la semana: el 1 de enero aún puede estar en la última semana del año anterior, o el 31 de diciembre puede estar en la primera semana del próximo año.

Podemos ver claramente la diferencia si usamos una cadena de formato de 'ww YYYY, MMMM yyyy' , para mostrar el número de semana y ambas definiciones de año:

  • Para en_GB obtenemos "01 2022, enero 2022"
  • Para fr_FR obtenemos "52 2021, enero 2022"

Por lo tanto, siempre use la forma "yy" en minúsculas, a menos que realmente esté mostrando los números de la semana.

 function formatted_month($month) { $first_day_in_month = new DateTime('2022-01-01'); $fmt = datefmt_create( 'fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Paris', IntlDateFormatter::GREGORIAN, 'MMMM yy' ); $formatted_month = datefmt_format($fmt,$first_day_in_month); return $formatted_month; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda