Quelle alternative à strftime ?
Résoluemrh Messages postés 427 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai besoin d'afficher la date avec le nom du jour en français... J'ai trouvé ça qui fonctionne très bien :
setlocale(LC_TIME, 'fr_FR.utf8','fra'); $aujourdhui = ucwords(strftime('%A %d %B %Y')); Aujourd'hui : <?php echo $aujourdhui;?>
Résultat : Aujourd'hui : Dimanche 17 Juillet 2022
Par contre je viens de lire sur PHP.net au sujet de strftime : "Cette fonction est OBSOLÈTE à partir de PHP 8.1.0. Il est fortement recommandé de les éviter."
Quelle serait l'alternative à cette instruction pour obtenir exactement le même résultat ?
J'ai essayé plein de trucs à partir date() mais je n'arrive à rien qui correspond à la syntaxe recherchée...
Merci d'avance pour vos lumières !
Linux / Chrome 103.0.0.0
- Onoff alternative
- Strftime replacement - Meilleures réponses
- Php strftime deprecated alternative - Meilleures réponses
- Coco.gg alternative - Accueil - Réseaux sociaux
- Coco chat alternative - Accueil - Réseaux sociaux
- Alternative zone telechargement - Accueil - Outils
- Alternative word gratuit - Guide
- Alternative office - Guide
3 réponses
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
Bonjour Pitet,
Merci pour ton aide...
Mais j'ai ce message d'erreur :
Fatal error: 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
D'autre part, si je fais un copier/coller dans mon code de
class IntlDateFormatter {
..../....
public setTimeZone(IntlTimeZone|DateTimeZone|string|null $timezone
): ?bool
}
J'ai ça :
Parse error: syntax error, unexpected '(', expecting variable (T_VARIABLE) in /var/www/html/gite/gestion/accueil.php on line 78
Mes lignes 76 à 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 )
Mais une chose m'inquiète vraiment : Va t-il falloir copier tout ce charabia pour remplacer mes 2 lignes initiales ?
Non il ne faut pas redéfinir la classe, il faut activer l'extension PHP Intl.
Sous quel environnement est-ce que tu développes ? Si tu es sur Windows avec un logiciel comme WampServer ou Laragon, l'extension Intl doit déjà être présente mais non activée, il suffit en général de décommenter la ligne extension=intl dans le fichier php.ini et redémarrer le serveur (tu dois également pouvoir activer l'extension via l'interface des outils WampServer/Laragon/etc.). Si tu es sur Linux, tu devrais facilement trouver les infos pour activer cette extension selon ta distribution.
Salut, merci pour l'exemple. Comme l'auteur, j'avais prévu de me pencher sur ce changement ; je garde ton snippet dans un coin.
Agréable journée :).