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.