¿Cuáles son alternativas a strftime?
Resueltoemrh Mensajes publicados 439 Estado Miembro -
Hola,
Necesito mostrar la fecha con el nombre del día en francés... Encontré esto que funciona muy bien:
setlocale(LC_TIME, 'fr_FR.utf8','fra'); $aujourdhui = ucwords(strftime('%A %d %B %Y')); Aujourd'hui : <?php echo $aujourdhui;?> Resultado: Aujourd'hui : Dimanche 17 Juillet 2022
Por otro lado acabo de leer en PHP.net sobre strftime: "Esta función está OBSOLETA a partir de PHP 8.1.0. Se recomienda evitarla fuertemente."
¿Cuál sería la alternativa a esta instrucción para obtener exactamente el mismo resultado?
He probado un montón de cosas desde date() pero no consigo nada que coincida con la sintaxis buscada...
¡Gracias de antemano por vuestra ayuda!
3 respuestas
-
Bonjour,
Préfère l'utilisation des classes DateTime et DateInterval pour manipuler les dates en PHP.
Comme indiqué sur la doc, une alternative est d'utiliser la classe IntlDateFormatter.
Tu peux utiliser les constantes prédéfinies de cette classe (LONG, SHORT, RELATIVE_FULL, ...) pour le format de la date et l'heure à l'instanciation (2e et 3e paramètre).
https://www.php.net/manual/fr/class.intldateformatter.php#intl.intldateformatter-constantsTu peux aussi définir un format personnalisé avec la méthode setPattern.
https://www.php.net/manual/fr/intldateformatter.setpattern.php<?php $aujourdhui = new DateTime(); $formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::NONE); echo $formatter->format($aujourdhui); // dimanche 17 juillet 2022 $formatter->setPattern('EEEE d MMMM y'); echo ucwords($formatter->format($aujourdhui)); // Dimanche 17 Juillet 2022 -
Hola Pitet,
Gracias por tu ayuda...Pero tengo este mensaje de error:
Error fatal: Uncaught Error: Class 'IntlDateFormatter' not found in /var/www/html/gite/gestion/accueil.php:78 Stack trace: #0 {main} thrown in /var/www/html/gite/gestion/accueil.php on line 78
Por otra parte, si hago un copiar/pegar en mi código de
class IntlDateFormatter {
..../....
public setTimeZone(IntlTimeZone|DateTimeZone|string|null$timezone): ?bool
}Tengo esto:
Parse error: syntax error, unexpected '(', expecting variable (T_VARIABLE) in /var/www/html/gite/gestion/accueil.php on line 78
Mis líneas 76 a 85class IntlDateFormatter { /* Méthodes */ public __construct( ?string $locale, int $dateType = IntlDateFormatter::FULL, int $timeType = IntlDateFormatter::FULL, IntlTimeZone|DateTimeZone|string|null $timezone = null, IntlCalendar|int|null $calendar = null, ?string $pattern = null )Pero una cosa me preocupa de verdad: ¿Tendrá que copiar todo este galimatías para reemplazar mis 2 líneas iniciales?
-
No hace falta redefinir la clase, hay que activar la extensión PHP Intl.
¿En qué entorno desarrollas? Si estás en Windows con un software como WampServer o Laragon, la extensión Intl suele estar presente pero no activada; basta, en general, descomentar la línea extension=intl en el archivo php.ini y reiniciar el servidor (también deberías poder activar la extensión desde la interfaz de herramientas de WampServer/Laragon/etc.). Si estás en Linux, deberías poder encontrar fácilmente la información para activar esta extensión según tu distribución.
-
-
Efectivamente, acabo de transferir la página.php correspondiente a Ionos y tu código funciona perfectamente!
(Voy a echar un vistazo a mi archivo php.ini, estoy en Linux con servidor local).Muchas gracias, voy a adoptar tu código para evitar que el mío quede obsoleto!
:-)