Ajouter des jours à $ Date en PHP

216

J'ai une date renvoyée dans le cadre d'une requête mySQL sous la forme 2010-09-17

Je voudrais définir les variables $ Date2 à $ Date5 comme suit:

$Date2 = $Date + 1

$Date3 = $Date + 2

etc..

pour qu'il revienne 2010-09-18, 2010-09-19etc ...

j'ai essayé

date('Y-m-d', strtotime($Date. ' + 1 day'))

mais cela me donne la date AVANT $Date.

Quelle est la bonne façon d'obtenir mes dates au format 'Ymd' afin qu'elles puissent être utilisées dans une autre requête?

Istari
la source

Réponses:

447

Tout ce que vous avez à faire est d'utiliser daysau lieu de daycomme ceci:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

Et il sort correctement:

2010-09-18
2010-09-19
shamittomar
la source
7
Il sort correctement en utilisant tout dayaussi bien ... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
Daniel Vandersluis
Je l'ai juste essayé de cette façon et cela a fonctionné. Je n'ai toujours aucune idée de la raison pour laquelle j'ai obtenu une valeur un jour avant ma date de début lorsque je l'ai initialement essayée.
Istari
Et si j'avais une variable pour ajouter le nombre de jours?
Carlos Martins
3
@Carlos echo date ("Ymd", strtotime ($ Date. '+'. $ Variable. 'Days'));
Pradeep Kumar Prabaharan
Non, cette méthode ne fonctionne pas du tout. Il revient une date de 2004.
gegobyte
81

Si vous utilisez PHP 5.3, vous pouvez utiliser un DateTimeobjet et sa addméthode:

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

Jetez un oeil à la page de manuel du DateIntervalconstructeur pour voir comment construire d'autres périodes à ajouter à votre date (2 jours seraient 'P2D', 3 seraient 'P3D', et ainsi de suite).

Sans PHP 5.3, vous devriez pouvoir utiliser strtotimela façon dont vous l'avez fait (je l'ai testé et cela fonctionne à la fois en 5.1.6 et 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"
Daniel Vandersluis
la source
Désolé Daniel, mais le serveur Web exécute PHP 5.2.6, donc cela ne fonctionnera pas
Istari
2
DateTime::constructutilise le même mécanisme que strtotimepour analyser la date, vous pouvez donc également faire new DateTime("+1 day $date")ce qui ne nécessiterait pas 5.3
Gordon
Je ne voulais pas voter contre cela, mais je l'ai fait = /
Steven
Ceci est la vraie réponse pour PHP 5.5+
TheLegendaryCopyCoder
29

Depuis PHP 5.2, vous pouvez utiliser la modification avec un objet DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

Soyez prudent lorsque vous ajoutez des mois ... (et dans une moindre mesure, des années)

Omn
la source
la réponse acceptée donne simplement la réponse pour 15000+ jours où cette réponse donne la réponse lorsque vous ajoutez 25000+ jours aussi ..
Pradeep Kumar Prabaharan
Vous pouvez également l'interroger sur un DateTimeImmutable () et vous obtenez une copie modifiée sans risque d'altérer l'original.
Xavi Montero
17

Voici un petit extrait pour illustrer les modifications de date:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";
Madhu V Rao
la source
pouvez-vous s'il vous plaît voir ma relation (quesiton) [ stackoverflow.com/q/61421783/8919244] ?
Faisal
8

Vous pouvez également utiliser le format suivant

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

Vous pouvez empiler les modifications de cette façon:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

Notez la différence entre cette approche et celle des autres réponses: au lieu de concaténer les valeurs +1 dayet <timestamp>, vous pouvez simplement passer l'horodatage comme deuxième paramètre de strtotime.

SztupY
la source
5

Utilisation d'une variable pour Nombre de jours

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 
Carlos Martins
la source
5

Voici la solution la plus simple à votre requête

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result
Engr Atiq
la source
2

Voici un moyen simple de résoudre ce problème.

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

La sortie sera:

2015-11-22

La solution a trouvé d'ici - Comment ajouter des jours à ce jour en PHP

JoyGuru
la source
0

Tous doivent utiliser le code ci-dessous:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";
vikasgore
la source
1
Vous ne devriez pas le faire de cette façon, vous aurez éventuellement des problèmes avec les secondes intercalaires
Nathan