Les Dates en PHP

Avertissement

La manipulation des dates, comme dans tous les langages de programmation est un sujet délicat, rarement traité de manière exhaustive et directe. PHP offre bon nombre de fonctions de manipulation des dates, parfois en double emploi et avec des syntaxes quelque peu différentes ! Malgré celà, on peut trouver son bohneur dans l’API de PHP pour manipuler les dates.

Affichage de dates avec un Locale

formats simples

<?php


setlocale(LC_TIME, 'fr_FR.UTF-8','fra'); 
echo strftime(" %A %d %B %Y").PHP_EOL;// %e sous unix
echo "DateTime de base (sans Locale):";
# Sans la localisation :
$maintenant = new DateTime();
echo $maintenant->format('l jS F Y H:i').PHP_EOL;
echo date('l jS \of F Y h:i:s A').PHP_EOL;

Resultat:

PHP Deprecated:  Function strftime() is deprecated in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/date-formats.php on line 5

Deprecated: Function strftime() is deprecated in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/date-formats.php on line 5
 Mercredi 08 février 2023
DateTime de base (sans Locale):Wednesday 8th February 2023 22:15
Wednesday 8th of February 2023 10:15:22 PM

Execution

dates formats php

extension Intl pour formats plus riches

<?php
# Avec l'extension intl :
echo "Avec l'extension Intl :";
$dt = new DateTime;
$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT);
$formatter->setPattern('E d.M.yyyy');

echo $formatter->format($dt).PHP_EOL;

Resultat:

Avec l'extension Intl :PHP Fatal error:  Uncaught Error: Class "IntlDateFormatter" not found in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/intl-date-ex.php:5
Stack trace:
#0 {main}
  thrown in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/intl-date-ex.php on line 5

Fatal error: Uncaught Error: Class "IntlDateFormatter" not found in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/intl-date-ex.php:5
Stack trace:
#0 {main}
  thrown in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/intl-date-ex.php on line 5

manipulation directe de timestamps

<?php
# manipulations de timestamps

echo date("M-d-Y", mktime(0, 0, 0, 12, 31, 2021)).PHP_EOL;
# décalages automatiques en cas de dates inexistantes :
echo date("M-d-Y", mktime(0, 0, 0, 12, 32,2021)).PHP_EOL;

setlocale(LC_ALL, 'fr_FR.UTF-8');
$maintenant = new DateTime();
$formatted_time = strftime("%a %d %B %Y", $maintenant->getTimestamp());
echo $formatted_time.PHP_EOL;

Resultat:

Dec-31-2021
Jan-01-2022
PHP Deprecated:  Function strftime() is deprecated in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/timestamps.php on line 10

Deprecated: Function strftime() is deprecated in /Users/roza/work/iut/prog/PHP/php-depot/source/exemples/timestamps.php on line 10
Mer 08 février 2023

Indication

Lorsqu’on utilise SQLite, on est obligé de manipuler directement les timestamps d’où l’utilité de ces fonctions.

vérification de validité de dates

<?php

# Vérification de validité de dates

var_dump(checkdate(12, 31, 2021));// date valide
var_dump(checkdate(12, 32, 2022));// invalide
var_dump(checkdate(2, 28, 2022));// 28 Février valide
var_dump(checkdate(2, 29, 2022));// 29 Février invalide

Resultat:

bool(true)
bool(false)
bool(true)
bool(false)