CakeFest 2024: The Official CakePHP Conference

strftime

(PHP 4, PHP 5, PHP 7, PHP 8)

strftimeFormate une date/heure locale avec la configuration locale

Avertissement

Cette fonction est OBSOLÈTE à partir de PHP 8.1.0. Il est fortement recommandé de les éviter.

Les alternatives à cette fonction incluent :

Description

strftime(string $format, ?int $timestamp = null): string|false

Formate une date et/ou une heure suivant la localisation locale. Les noms des mois, des jours de la semaine mais aussi d'autres chaînes dépendant de la location, respecteront la localisation courante définie par la fonction setlocale().

Avertissement

Tous les caractères modificateurs ne sont pas toujours supportés par toutes les bibliothèques C. Dans ce cas, ils ne seront pas supportés par PHP non plus. De plus, toutes les plates-formes ne supportent pas les timestamps négatifs, et vos dates pourraient être limitées par le début de l'époque Unix. Cela signifie que %e, %T, %R et %D (et peut être d'autres) et les dates antérieures au 1er Janvier 1970 ne fonctionneront pas sous Windows, sur certaines distributions de Linux, et sur certains systèmes d'exploitation. Pour Windows, une liste complète des options de conversion est disponible sur le » site de MSDN. Utilisez plutôt la méthode IntlDateFormatter::format().

Liste de paramètres

format

Les caractères suivants sont reconnus dans le paramètre format
format Description Exemple de valeurs retournées
Jour --- ---
%a Nom abrégé du jour de la semaine De Sun à Sat
%A Nom complet du jour de la semaine De Sunday à Saturday
%d Jour du mois en numérique, sur 2 chiffres (avec le zéro initial) De 01 à 31
%e Jour du mois, avec un espace précédant le premier chiffre. L'implémentation Windows est différente, voyez après pour plus d'informations. De 1 à 31
%j Jour de l'année, sur 3 chiffres avec un zéro initial 001 à 366
%u Représentation ISO-8601 du jour de la semaine De 1 (pour Lundi) à 7 (pour Dimanche)
%w Représentation numérique du jour de la semaine De 0 (pour Dimanche) à 6 (pour Samedi)
Semaine --- ---
%U Numéro de la semaine de l'année donnée, en commençant par le premier Lundi comme première semaine 13 (pour la 13ème semaine pleine de l'année)
%V Numéro de la semaine de l'année, suivant la norme ISO-8601:1988, en commençant comme première semaine, la semaine de l'année contenant au moins 4 jours, et où Lundi est le début de la semaine De 01 à 53 (où 53 compte comme semaine de chevauchement)
%W Une représentation numérique de la semaine de l'année, en commençant par le premier Lundi de la première semaine 46 (pour la 46ème semaine de la semaine commençant par un Lundi)
Mois --- ---
%b Nom du mois, abrégé, suivant la locale De Jan à Dec
%B Nom complet du mois, suivant la locale De January à December
%h Nom du mois abrégé, suivant la locale (alias de %b) De Jan à Dec
%m Mois, sur 2 chiffres De 01 (pour Janvier) à 12 (pour Décembre)
Année --- ---
%C Représentation, sur 2 chiffres, du siècle (année divisée par 100, réduit à un entier) 19 pour le 20ème siècle
%g Représentation, sur 2 chiffres, de l'année, compatible avec les standards ISO-8601:1988 (voyez %V) Exemple : 09 pour la semaine du 6 janvier 2009
%G La version complète à quatre chiffres de %g Exemple : 2009 pour la semaine du 3 janvier 2009
%y L'année, sur 2 chiffres Exemple : 09 pour 2009, 79 pour 1979
%Y L'année, sur 4 chiffres Exemple : 2038
Heure --- ---
%H L'heure, sur 2 chiffres, au format 24 heures De 00 à 23
%k L'heure au format 24 heures, avec un espace précédant un seul chiffre De 0 à 23
%I Heure, sur 2 chiffres, au format 12 heures De 01 à 12
%l ('L' minuscule) Heure, au format 12 heures, avec un espace précédant un seul chiffre De 1 à 12
%M Minute, sur 2 chiffres De 00 à 59
%p 'AM' ou 'PM', en majuscule, basé sur l'heure fournie Exemple : AM pour 00:31, PM pour 22:23. Le résultat exact dépend du système d'exploitation, et ils peuvent également renvoyer des variantes en minuscules, ou des variantes avec des points (comme a.m.).
%P 'am' ou 'pm', en minuscule, basé sur l'heure fournie Exemple : am pour 00:31, pm pour 22:23. Non pris en charge par tous les systèmes d'exploitation.
%r Identique à "%I:%M:%S %p" Exemple : 09:34:17 PM pour 21:34:17
%R Identique à "%H:%M" Exemple : 00:35 pour 12:35 AM, 16:44 pour 4:44 PM
%S Seconde, sur 2 chiffres De 00 à 59
%T Identique à "%H:%M:%S" Exemple : 21:34:17 pour 09:34:17 PM
%X Représentation de l'heure, basée sur la locale, sans la date Exemple : 03:59:16 ou 15:59:16
%z Le décalage horaire. Non implémenté tel que décrit sous Windows. Voir plus bas pour plus d'informations. Exemple : -0500 pour l'heure US de l'est
%Z L'abréviation du décalage horaire. Non implémenté tel que décrit sous Windows. Voir plus bas pour plus d'informations. Exemple : EST pour l'heure de l'Est
L'heure et la date --- ---
%c Date et heure préférées, basées sur la locale Exemple : Tue Feb 5 00:45:10 2009 pour le 5 février 2009 à 12:45:10 AM
%D Identique à "%m/%d/%y" Exemple : 02/05/09 pour le 5 février 2009
%F Identique à "%Y-%m-%d" (utilisé habituellement par les bases de données) Exemple : 2009-02-05 pour le 5 février 2009
%s Timestamp de l'époque Unix (identique à la fonction time()) Exemple : 305815200 pour le 10 septembre 1979 08:40:00 AM
%x Représentation préférée de la date, basée sur la locale, sans l'heure Exemple : 02/05/09 pour le 5 février 2009
Divers --- ---
%n Une nouvelle ligne ("\n") ---
%t Une tabulation ("\t") ---
%% Le caractère de pourcentage ("%") ---

Avertissement

Contrairement à la norme ISO-9899:1999, Sun Solaris commence avec le Dimanche à 1. Aussi, le format %u ne fonctionnera pas tel que décrit dans ce manuel.

Avertissement

Windows seulement :

Le modificateur %e n'est pas supporté sous Windows. Pour calculer la valeur, le modificateur %#d peut être utilisé à la place. L'exemple d'après illustre la manière d'écrire un code cross-plateforme.

Les modificateurs %z et %Z retournent tous les deux le nom du fuseau horaire au lieu du décalage ou de l'abréviation.

Avertissement

macOS et musl uniquement : Le modificateur %P n'est pas supporté par l'implémentation de cette fonction sous macOS.

timestamp

Le paramètre optionnel timestamp est un timestamp Unix de type entier qui vaut par défaut l'heure courante locale si timestamp est omis ou null. En d'autres termes, il vaut par défaut la valeur de la fonction time().

Valeurs de retour

Retourne une chaîne de caractères formatée suivant le paramètre format donné, en utilisant le paramètre timestamp ou la date locale courante si aucun timestamp n'est fourni. Les noms des mois, des jours de la semaine mais aussi d'autres chaînes dépendant de la location, respecteront la localisation courante définie par la fonction setlocale().

Erreurs / Exceptions

Chaque appel à une fonction date/heure générera un diagnostic de type E_WARNING si le fuseau horaire n'est pas valide. Voir aussi date_default_timezone_set()

Vu que la sortie dépend de la bibliothèque C sous-jacente, quelques spécificateurs de conversion ne sont pas supportés. Sous Windows, le fait de fournir un spécificateur de conversion inconnu retournera 5 messages de niveau E_WARNING et retournera false au final. Sous d'autres systèmes d'exploitation, vous ne recevrez aucun message de niveau E_WARNING et la sortie contiendra les spécificateurs non convertis.

Historique

Version Description
8.0.0 timestamp est désormais nullable.

Exemples

Cet exemple ne fonctionnera que si vous avez les locales respectives installées sur votre système.

Exemple #1 Exemple avec strftime()

<?php
setlocale
(LC_TIME, "C");
echo
strftime("%A");
setlocale(LC_TIME, "fi_FI");
echo
strftime(" in Finnish is %A,");
setlocale(LC_TIME, "fr_FR");
echo
strftime(" in French %A and");
setlocale(LC_TIME, "de_DE");
echo
strftime(" in German %A.\n");
?>

Exemple #2 Exemple au format de date ISO 8601:1988

<?php
/* December 2002 / January 2003
ISOWk M Tu W Thu F Sa Su
----- ----------------------------
51 16 17 18 19 20 21 22
52 23 24 25 26 27 28 29
1 30 31 1 2 3 4 5
2 6 7 8 9 10 11 12
3 13 14 15 16 17 18 19 */

// Affiche : 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/28/2002")) . "\n";

// Affiche : 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " . strftime("%V,%G,%Y", strtotime("12/30/2002")) . "\n";

// Affiche : 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";

// Affiche : 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";

/* December 2004 / January 2005
ISOWk M Tu W Thu F Sa Su
----- ----------------------------
51 13 14 15 16 17 18 19
52 20 21 22 23 24 25 26
53 27 28 29 30 31 1 2
1 3 4 5 6 7 8 9
2 10 11 12 13 14 15 16 */

// Affiche : 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";

// Affiche : 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";

// Affiche : 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";

// Affiche : 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " . strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";

?>

Exemple #3 %e fonctionnant sous toute plateforme

<?php

// Jan 1 : résultats dans : '%e%1%' (%%, e, %%, %e, %%)
$format = '%%e%%%e%%';

// Vérifie sous Windows, pour trouver et remplacer le modificateur %e
// correctement
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format);
}

echo
strftime($format);
?>

Exemple #4 Affiche tous les formats connus ou non.

<?php
// Décrit les formats.
$strftimeFormats = array(
'A' => 'Une représentation textuelle complète du jour',
'B' => 'Nom du mois complet, basé sur la locale',
'C' => 'Représentation sur 2 chiffres de l\'année (année, divisée par 100, tronquée en entier)',
'D' => 'Identique à "%m/%d/%y"',
'E' => '',
'F' => 'Identique à "%Y-%m-%d"',
'G' => 'La version complète, sur 4 chiffres de %g',
'H' => 'Une représentation sur 2 chiffres de l\'heure au format 24-heures',
'I' => 'Une représentation sur 2 chiffres de l\'heure au format 12-heures',
'J' => '',
'K' => '',
'L' => '',
'M' => 'Une représentation sur 2 chiffres des minutes',
'N' => '',
'O' => '',
'P' => '"am" ou "pm" (en minuscule) basé sur l\'heure courante',
'Q' => '',
'R' => 'Identique à "%H:%M"',
'S' => 'Une représentation sur 2 chiffres des secondes',
'T' => 'Identique à "%H:%M:%S"',
'U' => 'Numéro de la semaine pour l\'année courante, en commençant par le premier Dimanche comme première semaine',
'V' => 'ISO-8601:1988 numéro de la semaine de l\'année courante, commençant par la première semaine de l\'année avec au moins 4 jours de semaine, avec le Lundi comme début de semaine',
'W' => 'Une représentation numérique de la semaine de l\'année, en commençant par le premier Lundi comme première semaine',
'X' => 'Représentation préférée pour l\'heure, basée sur la locale, sans la date',
'Y' => 'Une représentation sur 4 chiffres de l\'année',
'Z' => 'L\'abréviation du décalage horaire, non fournie par %z (dépend sur système d\'exploitation)',
'a' => 'L\'abréviation de la représentation textuelle du jour',
'b' => 'L\'abréviation du nom du mois, basée sur la locale',
'c' => 'Timestamp préféré basé sur la locale',
'd' => 'Jour du mois sur 2 chiffres (avec le zéro initial)',
'e' => 'Jour du mois, avec un espace précédent un seul chiffre',
'f' => '',
'g' => 'Une représentation sur 2 chiffres de l\'année au format ISO-8601:1988 (voir %V)',
'h' => 'Abréviation du nom du mois, basée sur la locale (alias de %b)',
'i' => '',
'j' => 'Jour de l\'année, sur 3 chiffres avec zéro initial',
'k' => 'Heure, au format 24-heures, avec un espace précédant un seul chiffre',
'l' => 'Heure, au format 12-heures, avec un espace précédant un seul chiffre',
'm' => 'Une représentation du mois sur 2 chiffres',
'n' => 'Un caractère de nouvelle ligne ("\n")',
'o' => '',
'p' => '"AM" ou "PM" (en majuscule) basé sur l\'heure courante',
'q' => '',
'r' => 'Identique à "%I:%M:%S %p"',
's' => 'Timestamp par rapport à l\'époque Unix',
't' => 'Un caractère de tabulation ("\t")',
'u' => 'Représentation numérique du jour de la semaine au format ISO-8601',
'v' => '',
'w' => 'Représentation numérique du jour de la semaine',
'x' => 'Représentation préférée de la date, basée sur la locale, sans l\'heure',
'y' => 'Représentation de l\'année sur 2 chiffres',
'z' => 'Soit le décalage horaire depuis UTC ou son abréviation (suivant le système d\'exploitation)',
'%' => 'Un caractère pourcentage ("%")',
);

// Résultats.
$strftimeValues = array();

// 2value les formats tout en supprimant les erreurs.
foreach($strftimeFormats as $format => $description){
if (
False !== ($value = @strftime("%{$format}"))){
$strftimeValues[$format] = $value;
}
}

// Trouve la valeur la plus longue.
$maxValueLength = 2 + max(array_map('strlen', $strftimeValues));

// Affiche tous les formats connus.
foreach($strftimeValues as $format => $value){
echo
"Format connu : '{$format}' = ", str_pad("'{$value}'", $maxValueLength), " ( {$strftimeFormats[$format]} )\n";
}

// Affiche tous les formats non connus.
foreach(array_diff_key($strftimeFormats, $strftimeValues) as $format => $description){
echo
"Format inconnu : '{$format}' ", str_pad(' ', $maxValueLength), ($description ? " ( {$description} )" : ''), "\n";
}
?>

Résultat de l'exemple ci-dessus est similaire à :

Format connu : 'A' = 'Friday'            ( Une représentation textuelle complète du jour )
Format connu : 'B' = 'December'          ( Nom du mois complet, basé sur la locale )
Format connu : 'H' = '11'                ( Une représentation sur 2 chiffres de l'heure au format 24-heures )
Format connu : 'I' = '11'                ( Une représentation sur 2 chiffres de l'heure au format 12-heures )
Format connu : 'M' = '24'                ( Une représentation sur 2 chiffres des minutes )
Format connu : 'S' = '44'                ( Une représentation sur 2 chiffres des secondes )
Format connu : 'U' = '48'                ( Numéro de la semaine pour l'année courante, en commençant par le premier Dimanche comme première semaine )
Format connu : 'W' = '48'                ( Une représentation numérique de la semaine de l'année, en commençant par le premier Lundi comme première semaine )
Format connu : 'X' = '11:24:44'          ( Représentation préférée pour l'heure, basée sur la locale, sans la date )
Format connu : 'Y' = '2010'              ( Une représentation sur 4 chiffres de l'année )
Format connu : 'Z' = 'GMT Standard Time' ( L'abréviation du décalage horaire, non fournie par %z (dépend sur système d'exploitation )
Format connu : 'a' = 'Fri'               ( L'abréviation de la représentation textuelle du jour )
Format connu : 'b' = 'Dec'               ( L'abréviation du nom du mois, basée sur la locale )
Format connu : 'c' = '12/03/10 11:24:44' ( Timestamp préféré basé sur la locale )
Format connu : 'd' = '03'                ( Jour du mois sur 2 chiffres (avec le zéro initial) )
Format connu : 'j' = '337'               ( Jour de l'année, sur 3 chiffres avec zéro initial )
Format connu : 'm' = '12'                ( Une représentation du mois sur 2 chiffres )
Format connu : 'p' = 'AM'                ( "AM" ou "PM" (en majuscule) basé sur l'heure courante )
Format connu : 'w' = '5'                 ( Représentation numérique du jour de la semaine )
Format connu : 'x' = '12/03/10'          ( Représentation préférée de la date, basée sur la locale, sans l'heure )
Format connu : 'y' = '10'                ( Représentation de l'année sur 2 chiffres )
Format connu : 'z' = 'GMT Standard Time' ( Soit le décalage horaire depuis UTC ou son abréviation (suivant le système d'exploitation) )
Format connu : '%' = '%'                 ( Un caractère pourcentage ("%") )
Format inconnu : 'C'                       ( Représentation sur 2 chiffres de l'année (année, divisée par 100, tronquée en entier) )
Format inconnu : 'D'                       ( Identique à "%m/%d/%y" )
Format inconnu : 'E'
Format inconnu : 'F'                       ( Identique à "%Y-%m-%d" )
Format inconnu : 'G'                       ( La version complète, sur 4 chiffres de %g )
Format inconnu : 'J'
Format inconnu : 'K'
Format inconnu : 'L'
Format inconnu : 'N'
Format inconnu : 'O'
Format inconnu : 'P'                       ( "am" ou "pm" (en minuscule) basé sur l'heure courante )
Format inconnu : 'Q'
Format inconnu : 'R'                       ( Identique à "%H:%M" )
Format inconnu : 'T'                       ( Identique à "%H:%M:%S" )
Format inconnu : 'V'                       ( ISO-8601:1988 numéro de la semaine de l'année  courante, commençant par la première semaine de l'année avec au moins 4  jours de semaine, avec le Lundi comme début de semaine )
Format inconnu : 'e'                       ( Jour du mois, avec un espace précédent un seul chiffre )
Format inconnu : 'f'
Format inconnu : 'g'                       ( Une représentation sur 2 chiffres de l'année au format ISO-8601:1988 (voir %V) )
Format inconnu : 'h'                       ( Abréviation du nom du mois, basée sur la locale (alias de %b) )
Format inconnu : 'i'
Format inconnu : 'k'                       ( Heure, au format 24-heures, avec un espace précédant un seul chiffre )
Format inconnu : 'l'                       ( Heure, au format 12-heures, avec un espace précédant un seul chiffre )
Format inconnu : 'n'                       ( Un caractère de nouvelle ligne ("\n") )
Format inconnu : 'o'
Format inconnu : 'q'
Format inconnu : 'r'                       ( Identique à "%I:%M:%S %p" )
Format inconnu : 's'                       ( Timestamp par rapport à l'époque Unix )
Format inconnu : 't'                       ( Un caractère de tabulation ("\t") )
Format inconnu : 'u'                       ( Représentation numérique du jour de la semaine au format ISO-8601 )
Format inconnu : 'v'

Notes

Note: %G et %V, qui sont basées sur la semaine ISO 8601:1988, peut conduire à des résultats inattendus (bien que corrects) si le système de numérotation n'est pas connu. Voir l'exemple %V de cette page.

Voir aussi

add a note

User Contributed Notes 1 note

up
6
divinity76+spam at gmail dot com
1 year ago
there is a strftime compatibility package for php>=8.1 at https://github.com/alphp/strftime
To Top