Quelle alternative à strftime ?

Résolu/Fermé
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 - 17 juil. 2022 à 12:23
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 - 18 juil. 2022 à 13:49

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

3 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 544
17 juil. 2022 à 13:36

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
2
Utilisateur anonyme
17 juil. 2022 à 14:13

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 :).

0