# Programmation PHP/Dates

* Introduction
* Installer PHP
* Composer
* IDE
** PhpStorm
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Commentaires
** Premier programme
** Variables
** Variables superglobales
** Constantes
** Opérateurs
** Fonctions
** Tableaux
** Structures de contrôle
** Boucles
* Programmation avancée
** Dates
** Sessions
** Cookies
** Cache
*** Memcached
*** Redis
** Formulaire
** Fichiers
*** Objets COM
*** Images
** Mails
** Sécurité
** Programmation orientée objet
** Bases de données
*** Microsoft SQL Server
*** MySQL
*** PDO
*** SQLite
** Expressions rationnelles
** Code de haute qualité
*** Analyse statique de programmes
** Exceptions
** Xdebug
** Mots réservés
* Apprendre par l'exemple
** Utilisation de variables
** Un sommaire simple
** Interaction avec un formulaire
** Afficher le résultat d'une requête BDD
** Modifier une table
** Faire un livre d'or
** Faire un mini forum de discussion
** Parser avec DomXml
** Coder en MVC
** Faire un webservice
** Vérification RIO
** AJAX
** Sommaire en Ajax
** Mise à jour périodique d'un cadre
** Mini CMS
** Introduction
** Développement
*** Les couches choisies
*** Code de service
*** Modélisation
*** Implémentation
*** La vue
*** Ajaxification
*** Premier noyau
*** Fournir les données
*** IHM
** Rétrospective
** Conclusion
* Extensions PHP
** cURL
** DOMDocument
** JSON
** MING
** SPL
* Bibliothèques externes
** ADODB
** DOMPDF
** FPDF
** PHPExcel
** PHPMailer
** PHPWord
** RabbitMQ
* Cadriciels
** CakePHP
** PEAR
** Symfony
** Frameworks de tests
*** PHPUnit
*** SimpleTest
*** Behat
* Logiciels métier
* Problèmes connus
* Introduction
* Installer PHP
* Composer
* IDE
** PhpStorm
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Commentaires
** Premier programme
** Variables
** Variables superglobales
** Constantes
** Opérateurs
** Fonctions
** Tableaux
** Structures de contrôle
** Boucles
* Programmation avancée
** Dates
** Sessions
** Cookies
** Cache
*** Memcached
*** Redis
** Formulaire
** Fichiers
*** Objets COM
*** Images
** Mails
** Sécurité
** Programmation orientée objet
** Bases de données
*** Microsoft SQL Server
*** MySQL
*** PDO
*** SQLite
** Expressions rationnelles
** Code de haute qualité
*** Analyse statique de programmes
** Exceptions
** Xdebug
** Mots réservés
* Apprendre par l'exemple
** Utilisation de variables
** Un sommaire simple
** Interaction avec un formulaire
** Afficher le résultat d'une requête BDD
** Modifier une table
** Faire un livre d'or
** Faire un mini forum de discussion
** Parser avec DomXml
** Coder en MVC
** Faire un webservice
** Vérification RIO
** AJAX
** Sommaire en Ajax
** Mise à jour périodique d'un cadre
** Mini CMS
** Introduction
** Développement
*** Les couches choisies
*** Code de service
*** Modélisation
*** Implémentation
*** La vue
*** Ajaxification
*** Premier noyau
*** Fournir les données
*** IHM
** Rétrospective
** Conclusion
* Extensions PHP
** cURL
** DOMDocument
** JSON
** MING
** SPL
* Bibliothèques externes
** ADODB
** DOMPDF
** FPDF
** PHPExcel
** PHPMailer
** PHPWord
** RabbitMQ
* Cadriciels
** CakePHP
** PEAR
** Symfony
** Frameworks de tests
*** PHPUnit
*** SimpleTest
*** Behat
* Logiciels métier
* Problèmes connus
[ Modifier le sommaire ]

## date

La fonction date créer une chaîne de caractère contenant la date du jour au format défini par son paramètre, selon la syntaxe suivante :
* Y (year) : année.
* m (month) : mois.
* M : nom des mois (en français si setlocale(LC_TIME, 'fr_FR');)
* d (day) : jour.
* t : dernier jour du mois
* w (week) : jour de la semaine sous forme d'un numéro.
| 0 | dimanche |
| 1 | lundi |
| 2 | mardi |
| 3 | mercredi |
| 4 | jeudi |
| 5 | vendredi |
| 6 | samedi |
Exemple :
À cela on peut rajouter les options d'horodatage les plus courantes :
* a (ante meridiem ou post meridiem) : renvoie "am" le matin et "pm" l'après-midi.
* h (hour) : heure de 0 à 12. À utiliser avec "a".
* H (Hour) : heure de 0 à 24.
* i (minute) : minute.
* s (second) : seconde.
Exemple :

## strtotime

Cette fonction transforme un texte (en anglais) en date.
Exemples courants :
Pour afficher la plage des dates de la semaine précédente :

## checkdate

Il est impératif dans un formulaire de vérifier si une date est au bon format. Pour ce faire il existe checkdate qui demande de séparer le mois, le jour puis l'année. Exemple :

## DateTime

Cette classe peut être instanciée en style POO ou en style procédural. Exemple :
Résultat : 2018-01-01 00:00:00.
Pour générer une date relative à l'actuelle :
Pour date relative à une absolue :
Elle possède également des méthodes pour modifier les dates :
* Via une string : $date->modify('-1 day');
* Via un objet de type DateInterval.
* Pour modifier les heures, par exemple pour obtenir la date du jour à minuit : (new DateTime)->setTime(0, 0);.

### add

La méthode DateTime::add (et son alias date_add), permet d'ajouter deux dates.

### diff

La méthode DateTime::diff (et son alias date_diff), permet de soustraire deux dates.
Exemple :
Résultat : 1400 jours.

### Conversion Timestamp en DateTime
## DateTimeImmutable

Idem que DateTime mais immutable.

## DateInterval

Cette classe gère les intervalles entre deux dates et est instanciée avec les paramètres suivants, sensibles à la casse :
* P : period (période).
* Y : year (année).
* M : month (mois).
* D : day (jour).
* H : hour (heure).
* I : minute.
* S : second (seconde).
Exemple :
Résultat : 1 an 2 mois 3 jours.
La syntaxe au sein de la méthode "format" est légèrement différente puisqu'elle accepte les minuscules (pour afficher les chiffres sans préfixe "0", ex : "1" au lieu de "1"), et aussi :
* a : nombre de jours au total.
* N : numéro du jour de la semaine (1 = lundi, 7 = dimanche).
La syntaxe pour les dates (année, mois, jour) et les temps (heure, minute, seconde) est différente : il faut ajouter un "T" pour les temps. Ex :
Les objets de cette classe peuvent être placés en paramètre des méthodes de DateTime add et sub. Ils peuvent aussi être obtenus en résultat de diff vu ci-dessus.

## DatePeriod =

Pour calculer le nombre de récurrences d'un intervalle au sein d'une période (mais pas la date de fin à partir du début et de la durée).

## Timestamps
### time

Cette fonction affiche la date courante au format horodatage Unix, c'est-à-dire en nombre de seconde depuis le premier janvier 1970.
Ce format permet d'additionner ou soustraire deux dates très facilement, est peut être reconverti en date en étant placé en second paramètre de la fonction date.

### mktime

Cette fonction (make time) crée une chaine de caractères contenant un horodatage Unix, c'est-à-dire un nombre de seconde représentant une date comprise en 1970 et 2038.
Exemple de calcul avec strtotime, qui accepte les timestamps en second paramètre :

## date_default_timezone_set

Ex :

## Références

* ↑ http://php.net/manual/fr/function.date.php
* ↑ http://php.net/manual/fr/function.strtotime.php
* ↑ http://stackoverflow.com/questions/21644002/how-can-i-get-last-week-date-range-in-php
* ↑ http://php.net/manual/fr/function.checkdate.php
* ↑ http://php.net/manual/fr/datetime.format.php
* ↑ https://www.php.net/manual/fr/function.date-add.php
* ↑ https://www.php.net/manual/fr/function.date-diff.php
* ↑ http://php.net/manual/fr/class.datetimeimmutable.php
* ↑ http://php.net/manual=/fr/dateinterval.format.php
* ↑ https://www.php.net/manual/en/class.dateperiod.php