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
 Mardi 27 juin 2023
DateTime de base (sans Locale):Tuesday 27th June 2023 14:48
Tuesday 27th of June 2023 02:48:46 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
Mar 27 juin 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)