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?


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

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"

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)


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";

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.


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 

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


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";

1
Vous ne devriez pas le faire de cette façon, vous aurez éventuellement des problèmes avec les secondes intercalaires
Nathan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.