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
Este es un error sutil de la cadena de formato, que es que hay varios especificadores de año diferentes:
yy o yyyy en minúsculas es el año normal que esperaría, para usar con el mes y el día.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:
en_GB obtenemos "01 2022, enero 2022"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; }