DateTime::createFromFormat en fin de mois ajoute un mois : Pourquoi ?

php-createfromformat-issue
Si vous utilisez souvent DateTime::createFromFormat avec Php, vous risquez de tomber dans un petit piège.

Par exemple, vous faites :


DateTime::createFromFormat('Y-m', '2016-02')

Mais le jour où le serveur exécute ça, on est le 31 Janvier par exemple.

Là vous avez une date de sortie qui ressemble à 2016-03. Vous vous demandez pourquoi ?

En réalité c’est assez logique. Si on regarde la doc php correspondante on constate que vu que les gens qui ne sont pas initialisés, vont être générés avec la valeur courante. Autrement dit, vu que vous n’avez pas précisé le jour, il va chercher le jour actuel, soit le 31 dans notre exemple.

Mais, le 31 février n’existe pas, donc on passe au moins suivant. La solution c’est donc de mettre en point d’exclamation devant le format : strtotime


DateTime::createFromFormat('!Y-m'", '2016-02')

metrogeek

Laisser un commentaire