2010-09-16 12 views
128

J'ai une date de retour 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 retourne 2010-09-18, 2010-09-19 etc ...

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 'Y-m-d' pour qu'elles puissent être utilisées dans une autre requête?

+0

double possible de [PHP Le calcul futur date en ajoutant des jours à une date variable] (http://stackoverflow.com/questions/2692679/php-c alculating-future-date-en-ajoutant-days-to-a-variable-date) – Gordon

Répondre

272

Tout ce que vous avez à faire est d'utiliser days au lieu de day comme 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 
+4

sorties correctement en utilisant juste 'day' ainsi ...' date ("Ymd", strtotime ('2010-09-17 + 1 jour')) '->' 2010-09-18', 'date (" Ymd " , strtotime ('2010-09-17 + 2 jour')) '->' 2010-09-19' –

+0

Juste essayé de cette façon et cela a fonctionné. Je n'ai toujours aucune idée de pourquoi j'ai eu une valeur un jour avant ma date de début quand je l'ai essayé. – Istari

+0

Et si j'avais une variable pour le nombre de jours à ajouter? –

52

Si vous utilisez PHP 5.3, vous pouvez utiliser un objet DateTime et sa méthode add:

$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 DateInterval constructor pour voir comment construire d'autres périodes à ajouter à votre date (2 jours seraient 'P2D', 3 serait 'P3D', et ainsi de suite).

Sans PHP 5.3, vous devriez être en mesure d'utiliser strtotime la façon dont vous l'avez fait (je l'ai testé et il fonctionne dans les deux 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" 
+0

Désolé Daniel, mais le serveur web exécute PHP 5.2.6, cela ne fonctionnera donc pas – Istari

+1

'DateTime :: construct' utilise le même mécanisme comme 'strtotime' pour analyser la date, donc vous pouvez aussi faire' new DateTime ("+ 1 jour $ date") 'qui ne nécessiterait pas 5.3 – Gordon

+0

Je ne voulais pas baisser le ton, mais je l'ai fait = – Stevus

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, éventuellement vous aurez des problèmes avec les secondes intercalaires – Nathan

7

Vous pouvez également utiliser le format suivant

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

Vous pouvez empiler les changements de cette façon:

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

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

13

Voici un petit extrait pour démontrer 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"; 
1

Utilisation d'une variable pour le nombre de jours

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

Depuis PHP 5.2, vous pouvez utiliser modifier 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)

+0

réponse acceptée donne juste une réponse pour 15000+ jours où cette réponse donne une réponse lorsque vous ajoutez 25000+ jours aussi .. –

1

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

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

sortie sera:

2015-11-22 

Solution a trouvé d'ici - How to Add Days to Date in PHP

1

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 
Questions connexes