Mon code pour ajouter un jour à une date renvoie une date avant le jour en ajoutant: la
2009-09-30 20:24:00
date après l'ajout d'un jour DEVRAIT être reportée au mois suivant:1970-01-01 17:33:29
<?php
//add day to date test for month roll over
$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00"));
echo 'date before day adding: '.$stop_date;
$stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));
echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;
?>
J'ai déjà utilisé un code assez similaire, qu'est-ce que je fais de mal ici?
date('Y-m-d H:i:s', strtotime($stop_date . ' + 1 day'));
comme dans la réponse que @ w35l3y vous a donnée.la source
Solution la plus simple:
la source
echo (new DateTime('+1 day'))->format('Y-m-d H:i:s');
Unexpected T_OBJECT_OPERATOR” error in PHP
Cela a fonctionné pour moi: pour la date actuelle
pour n'importe quelle date:
la source
strtotime()
- il peut tout gérer en un seul appel:date('Y-m-d', strtotime($date . " +1 day"));
Essaye ça
la source
Manière simple à lire et à comprendre:
la source
J'ajoute toujours juste 86400 (secondes dans un jour):
Ce n'est pas la façon la plus astucieuse de le faire, mais ça marche!
la source
Bien que je sois d'accord avec la réponse de Doug Hays, je vais dire ici que la raison pour laquelle votre code ne fonctionne pas est que strtotime () attend un INT comme 2ème argument, pas une chaîne (même une qui représente une date)
Si vous activez le rapport d'erreur max, vous verrez cela comme une erreur "Une valeur numérique non bien formée" qui est de niveau E_NOTICE.
la source
La
modify()
méthode qui peut être utilisée pour ajouter des incréments à uneDateTime
valeur existante .Créez un nouvel
DateTime
objet avec la date et l'heure actuelles:Une fois que vous avez l'
DateTime
objet, vous pouvez manipuler sa valeur en ajoutant ou en soustrayant des périodes:Vous pouvez en savoir plus sur le manuel PHP .
la source
Le code suivant récupère le premier jour de janvier de l'année en cours (mais il peut s'agir d'une autre date) et ajoute 365 jours à ce jour (mais cela peut être N nombre de jours) en utilisant la classe DateTime et sa méthode modify () et format ( ):
la source
Puisque vous avez déjà une réponse à ce qui ne va pas avec votre code, je peux apporter une autre perspective sur la façon dont vous pouvez jouer avec les datetimes en général et résoudre votre problème en particulier.
Souvent, vous vous trouvez poser un problème en termes de solution. Ce n'est qu'une des raisons pour lesquelles vous vous retrouvez avec un code impératif . C'est génial si cela fonctionne cependant; il existe juste d'autres alternatives, sans doute plus faciles à maintenir. L'un d'eux est un code déclaratif . Le but est de vous demander ce dont vous avez besoin, au lieu de savoir comment vous y rendre.
Dans votre cas particulier, cela peut ressembler à ce qui suit. Tout d'abord, vous devez savoir ce que vous recherchez, c'est-à-dire découvrir des abstractions. Dans votre cas, il semble que vous ayez besoin d'une date . Pas n'importe quelle date, mais celle ayant une représentation standard. Dites, date ISO8601. Il existe au moins deux implémentations: la première est une date analysée à partir d'une chaîne au format ISO8601 (ou une chaîne dans un autre format en fait), et la seconde est une date future qui est un jour plus tard. Ainsi, tout le code pourrait ressembler à ça:
Pour plus d'exemples de jonglage datetime, consultez celui-ci .
la source