web-dev-qa-db-fra.com

Ajout d'un jour à une date

Mon code pour ajouter un jour à une date retourne une date avant le jour en ajoutant: 2009-09-30 20:24:00 date après avoir ajouté un jour DEVRAIT être reporté 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 similaire, qu'est-ce que je fais de mal ici?

134
ian
<?php
$stop_date = '2009-09-30 20:24:00';
echo 'date before day adding: ' . $stop_date; 
$stop_date = date('Y-m-d H:i:s', strtotime($stop_date . ' +1 day'));
echo 'date after adding 1 day: ' . $stop_date;
?>

Pour PHP 5.2.0+, vous pouvez également procéder comme suit:

$stop_date = new DateTime('2009-09-30 20:24:00');
echo 'date before day adding: ' . $stop_date->format('Y-m-d H:i:s'); 
$stop_date->modify('+1 day');
echo 'date after adding 1 day: ' . $stop_date->format('Y-m-d H:i:s');
275
w35l3y
$date = new DateTime('2000-12-31');

$date->modify('+1 day');
echo $date->format('Y-m-d') . "\n";
80
Prasanth Bendra

La solution la plus simple:

$date = new DateTime('+1 day');
echo $date->format('Y-m-d H:i:s');
25
minlare

Cela a fonctionné pour moi: Pour la date actuelle

$date = date('Y-m-d', strtotime("+1 day"));

pour n'importe quelle date:

date('Y-m-d', strtotime("+1 day", strtotime($date)));
13
Jay Momaya

Essaye ça

echo date('Y-m-d H:i:s',date(strtotime("+1 day", strtotime("2009-09-30 20:24:00"))));
6
user1987095

Simple à lire et à comprendre de manière:

$original_date = "2009-09-29";

$time_original = strtotime($original_date);
$time_add      = $time_original + (3600*24); //add seconds of one day

$new_date      = date("Y-m-d", $time_add);

echo $new_date;
5
joan16v

Je viens toujours d'ajouter 86400 (secondes dans une journée):

$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00") + 86400);

echo 'date after adding 1 day: '.$stop_date; 

Ce n'est pas la façon la plus simple de le faire, mais ça marche!

2
Doug Hays

La méthode modify() qui peut être utilisée pour ajouter des incréments à une valeur DateTime existante.

Créez un nouvel objet DateTime avec la date et l'heure actuelles:

$due_dt = new DateTime();

Une fois que vous avez l'objet DateTime, vous pouvez manipuler sa valeur en ajoutant ou en soustrayant des périodes:

$due_dt->modify('+1 day');

Vous pouvez en lire plus sur le manuel PHP .

1
Kal

Bien que je sois d’accord avec la réponse de Doug Hays, je vais préciser ici que la raison pour laquelle votre code ne fonctionne pas est que strtotime () attend un INT comme deuxième argument, pas une chaîne (même celle qui représente une date)

Si vous activez le rapport d'erreur max, vous verrez ceci comme une erreur "Une valeur numérique non bien formée" qui correspond au niveau E_NOTICE.

1
Peter Bailey

Le code suivant obtient 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 il peut s'agir d'un nombre de jours) à l'aide de la classe DateTime et de sa méthode modify () et format ( ):

echo (new DateTime((new DateTime())->modify('first day of January this year')->format('Y-m-d')))->modify('+365 days')->format('Y-m-d');
0
Carlos Espinoza