¿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-constants
Tu 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 85
class 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.
Hola, gracias por el ejemplo. Como el autor, tenía previsto enfocarme en este cambio; voy a guardar tu snippet en un rincón.
Que tengas un buen día :).