La fonction `date()` est un outil permettant de travailler avec la date et l'heure. Il est utilisé dans deux cas :
Já jsem speciální stránka. Vím, že právě je<?phpecho date('H:i'); // Hodina:minuta?>
AVERTISSEMENT : PHP n'imprime pas votre heure, mais l'heure du serveur. Par conséquent, il se peut que vous obteniez une heure différente de celle qui est réglée sur votre ordinateur.
La fonction est appelée de la manière habituelle et les demandes individuelles sont saisies comme arguments de la fonction.
echo date('marques de formatage', atribut konkrétního času);
Les marques de formatage indiquent dans quel format la date sera imprimée. Les marques peuvent inclure des espaces, des points, des deux-points, des tirets, des traits d'union et d'autres caractères qui ne sont pas eux-mêmes des marques de formatage (si vous voulez utiliser une marque de formatage, vous devez l'échapper). Vous trouverez ci-dessous un aperçu de chaque étiquette.
Le deuxième attribut (facultatif) indique la date ou l'heure saisie manuellement, qui sera convertie et éditée dans le format correspondant au premier paramètre. Il doit être spécifié en tant que timestamp (peut être obtenu via la balise de formatage "U").
Exemple :
echo date('d. m. Y', 1405856605); // avant le 20. 07. 2014
Caractère | Description |
---|---|
Y |
Année à quatre chiffres (par exemple 1998) |
Année sous la forme d'un nombre à deux chiffres (par exemple, 98). | |
M |
Abréviation anglaise du nom du mois (par exemple Jan) |
m |
Numéro du mois (01-12) |
F |
Nom du mois en anglais (par exemple, janvier) |
D |
Abréviation anglaise du jour de la semaine (ex. : Fri) |
l |
Nom anglais du jour de la semaine (par exemple, vendredi) |
N |
Numéro du jour de la semaine (1 - lundi, 7 - dimanche) |
w |
Numéro du jour de la semaine (0 - dimanche, 1 - lundi, 6 - samedi) |
d |
Jour du mois (01-31) |
j |
Numéro du jour du mois (1-31) |
z |
Jour de l'année (001-365) |
H |
Heure (00-23) |
h |
Heure (01-12) |
i |
Minute (00-59) |
s |
Second (00-59) |
U |
Timestamp: Nombre de secondes depuis le début du temps (depuis le 1er janvier 1970) |
S |
Terminaison anglaise du numéro ordinal du jour du mois |
A |
Indicateur AM/PM |
a |
Indicateur de matin/après-midi (am/pm) |
P |
Différence par rapport à l'heure de Greenwich (GMT) avec un séparateur entre les heures et les minutes (ajouté en PHP 5.1.3), par exemple : +02:00 |
g |
Heure au format 12 heures (1-12) |
G |
Heure au format 24 heures (0-23) |
Très souvent, vous devez formater l'heure du fichier sitemap.xml
, qui contient la date et l'heure de la dernière modification de la balise <lastmod>
.
Depuis PHP 5.1.3, la syntaxe suivante peut être utilisée pour faire cela :
date('Y-m-d\TH:i:sP');
La date et l'heure seront affichées à la seconde près et comprendront également des informations sur le fuseau horaire où se trouve le serveur (le fuseau horaire est déterminé par le système d'exploitation du serveur).
Il n'est pas possible d'obtenir les noms tchèques des jours et des mois en PHP de manière normale, nous devons donc écrire ces valeurs nous-mêmes. Le meilleur moyen est de stocker les entrées dans un tableau et de les récupérer en utilisant un appel d'index.
$mesice = [1 => 'Janvier', 'Février', 'Mars', 'Avril', 'Mai','Juin', 'Juillet', 'Août', 'Septembre', 'Octobre','Novembre', 'Décembre'];$dny = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'];
Cet exemple est un exemple simplifié de Jakub Vrana de l'article Noms tchèques des mois et des jours de la semaine.
Nous avons souvent une date au format "Vendredi 13 septembre" et nous voulons la traduire en anglais, mais comment faire ? Le meilleur moyen est d'appeler une fonction, par exemple datumcesky()
, à laquelle nous passons la date anglaise et qui la traduit.
function datumCesky(string $date): string{$men = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai','Juin', 'Juillet', 'Août', 'Septembre', 'Octobre','Novembre', 'Décembre'];$mcz = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai','Juin', 'Juillet', 'Août', 'Septembre', 'Octobre','Novembre', 'Décembre'];$date = str_replace($men, $mcz, $date);$den = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi','Vendredi', 'Samedi', 'Dimanche'];$dcz = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi','Vendredi', 'Samedi', 'Dimanche'];return str_replace($den, $dcz, $date);}
Exemple d'utilisation :
echo datumCesky('Vendredi 13 septembre'); // Vendredi 13 décembre
Cette fonction n'est certainement pas idéale pour la traduction, car elle ne fait que remplacer les mots anglais par des mots tchèques, mais elle peut être suffisante pour de nombreux déploiements. Pour les traductions plus avancées, vous devez toujours garantir la syntaxe exacte pour traduire dans un style uniforme, par exemple Vendredi, 13 décembre
.
Le premier jour d'avril 2018 était un dimanche, mais comment le savoir facilement ?
Depuis PHP 5.1.0, il existe une solution simple :
echo date('N', strtotime('2018-04-01')); // 1 (lundi), 7 (dimanche)
Dans les anciennes versions, nous devons implémenter cette fonction nous-mêmes :
/*** @auteur Jan Barášek*/function getFirstDayPosition(?int $year = null, ?int $month = null): int{$day = (int) date('w', strtotime($year . '-' . $month . '-1')) - 1;return $day < 0 ? 7 : $day + 1;}
Comme le modificateur w
renvoie la sortie au format US, je modifie encore le numéro du jour par un simple calcul. La fonction renvoie un nombre entier compris entre 1 (lundi) et 7 (dimanche).
Souvent, nous devons sauter d'un temps relatif (disons +5 jours), ou extraire une date de la saisie de texte d'un utilisateur pour la rendre valide. Pour ce faire, la fonction strtotime() permet la syntaxe suivante :
echo strtotime('maintenant');echo strtotime('10 septembre 2000');echo strtotime('+1 jour');echo strtotime('+1 semaine');echo strtotime('+1 semaine 2 jours 4 heures 2 secondes');echo strtotime('jeudi prochain');echo strtotime('lundi dernier');
La sortie de la fonction est l'horodatage (temps universel) de l'heure spécifiée sous forme d'un nombre entier.
En général, je recommande de déployer cette fonction sur tous les formulaires où nous travaillons avec le temps de l'utilisateur d'une manière ou d'une autre. Ce n'est certainement pas une bonne idée de forcer l'utilisateur à écrire la date dans un format particulier, mais il faut toujours créer automatiquement un tel format pour que l'utilisateur puisse écrire ce qu'il veut. Car souvent, le texte, par exemple, est copié de quelque part et c'est trop de travail de le reformater manuellement alors que cela peut être fait automatiquement.
Depuis le 1er janvier 1970, chaque seconde est ajoutée à une pour donner un énorme nombre entier qui indique le temps qui s'est écoulé depuis cette date. Cette fonction est particulièrement utile pour calculer simplement les différences de temps. C'est une solution assez fiable, mais elle comporte des risques (le problème de 2038).
Propriétés générales de cette notation:
La valeur actuelle de l'heure est affichée au-dessus de ce texte, qui est incrémenté de +1 toutes les secondes. La valeur actuelle est chargée par javascript, elle n'est donc pas toujours exacte (elle indique l'heure système de votre ordinateur).
Les ordinateurs stockent les nombres entiers sous forme binaire, et s'il s'agit d'un nombre entier, il comporte souvent 32 bits (32 uns et zéros). Le plus grand nombre possible de 32 bits est : 011 111 111 111 111 111 111 111 111 11
.
Cependant, si nous ajoutons +1 à cette constante chaque seconde, nous obtiendrons un jour un tel nombre (ce sera le 19 janvier 2038 à 03:14:07). Cependant, lorsque nous essaierons d'ajouter un autre 1, la plage de bits ne sera plus suffisante (le nombre serait plus grand que ce qui peut être stocké sur 32 bits), il y aura donc un débordement de la pile, c'est-à-dire qu'un 1 sera ajouté au début du nombre, ce qui, sous forme binaire, signifie un nombre négatif, (ce qui fera probablement planter le programme), nous amenant quelque part en l'an 1901 (ugh !).
Il existe deux solutions à ce problème :
DateTime
(couramment disponible en PHP), qui fournit une approche orientée objet de la gestion des dates, est bien compatible avec la base de données, et offre une gamme d'années allant de 0001
à 9999
, ce qui est suffisant pour les besoins de la plupart des applications du monde réel.Personnellement, je préconise d'utiliser le type de données DateTime
et de ne pas utiliser du tout le stockage des entiers.
PHP est intelligent, il essaie donc toujours d'utiliser le meilleur fuseau horaire actuel où se trouve le serveur. Cependant, il peut arriver que le fuseau horaire soit mal spécifié, ou que nous programmions une application globale à laquelle des utilisateurs du monde entier accèdent et que nous devions donc modifier manuellement le fuseau horaire.
Cela peut être fait globalement pour l'ensemble du script PHP en appelant une fonction :
date_default_timezone_set('UTC');
Occasionnellement, vous pouvez aussi rencontrer cette solution (détecter que le serveur a un fuseau horaire autre que UTC) :
$defaultTimeZone = 'UTC';if (date_default_timezone_get() != $defaultTimeZone) {date_default_timezone_set($defaultTimeZone);}
Ce n'est pas PHP lui-même qui est responsable de l'obtention de la date et de l'heure actuelles, mais le système d'exploitation sur lequel il fonctionne. Ainsi, si vous devez modifier manuellement l'heure, faites-le à cet endroit.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | fr