Ajouter un nombre de jours à une date


124

Je souhaite ajouter un nombre de jours à la date actuelle: j'utilise le code suivant:

$i=30;
echo $date = strtotime(date("Y-m-d", strtotime($date)) . " +".$i."days");

Mais au lieu d'obtenir la bonne date, je reçois ceci: 2592000

Veuillez suggérer.




4
rechercher en utilisant des noms de balises entourés de crochets, par exemple [php] [date] adddans la zone de recherche. Vous trouverez de nombreuses réponses à des questions comme celle-ci.
Mikel

Réponses:


247

Ce devrait être

echo date('Y-m-d', strtotime("+30 days"));

strtotime

s'attend à recevoir une chaîne contenant un format de date en anglais américain et essaiera d'analyser ce format en un horodatage Unix (le nombre de secondes depuis le 1er janvier 1970 00:00:00 UTC), par rapport à l'horodatage donné dans now, ou le l'heure actuelle si maintenant n'est pas fournie.

tandis que date

Renvoie une chaîne formatée selon la chaîne de format donnée en utilisant l'horodatage entier donné ou l'heure actuelle si aucun horodatage n'est donné.

Voir les pages de manuel pour

et leurs signatures de fonction.


Je pense que cela posera des problèmes lors du franchissement des heures d'été et d'autres éléments de calendrier amusants. Cela dépend en quelque sorte du contexte. Vous devez vous demander si vous recherchez 30 blocs de 24 heures, ce qui, lors de la traversée d'un jour d'heure d'été, pourrait vous mettre à 23h00.
JJ Rohrer du

1
@JJRohrer non, ce ne sera pas le cas. strtotimeprendra en compte tout DST pour le fuseau horaire configuré. L'heure d'été n'est un problème que lorsque vous faites quelque chose comme ceci OP: stackoverflow.com/questions/4066035
Gordon

Point pris. Je suis arrivé à cette question en essayant de résoudre quelque chose d'un peu plus proche de la question à laquelle vous avez fait référence. J'espère que mon commentaire ci-dessus incitera les autres à penser à prendre leurs calculs de date au sérieux - il est facile d'oublier toutes les exceptions.
JJ Rohrer

64

Celui-ci pourrait être bon

function addDayswithdate($date,$days){

    $date = strtotime("+".$days." days", strtotime($date));
    return  date("Y-m-d", $date);

}

4
La solution ci-dessus peut également être compactée en une seule ligne si vous avez besoin d'une solution rapide et que vous ne souhaitez pas créer de fonction. echo date ("Ymd", strtotime ("+ 12days", strtotime (20130101)))
Mayank Jaiswal

46
$date = new DateTime();
$date->modify('+1 week');
print $date->format('Y-m-d H:i:s');

ou print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));


Cette méthode traite du passage à l'heure d'été. Je ne sais pas si php tient compte d'autres bizarreries temporelles, comme les secondes intercalaires, mais, en fonction de vos besoins, vous feriez probablement mieux d'utiliser DateTime contre StrToTime si vous traitez avec des jours civils.
JJ Rohrer le

@chx Cette solution permet également plus soigneusement une date; par exemple, nouveau DateTime ('2016-12-09 10:35:58'); qui provient d'un horodatage de base de données ...
mshaffer

10
$today=date('d-m-Y');
$next_date= date('d-m-Y', strtotime($today. ' + 90 days'));
echo $next_date;

10

Vous pouvez également ajouter comme ceci, si vous voulez la date à 5 jours d'une date spécifique:

Vous avez une variable avec une date comme celle-ci (obtenue à partir d'une entrée ou d'une base de données ou simplement codée en dur):

$today = "2015-06-15"; // Or can put $today = date ("Y-m-d");

$fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));

echo $fiveDays; // Will output 2015-06-20

7

Gardez à l'esprit que le changement d'horloge en raison de l'heure d'été peut vous poser des problèmes lors du calcul des jours uniquement.

Voici une petite fonction php qui s'occupe de cela:

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}


6

Vous pouvez le faire en manipulant le code temporel ou en utilisant strtotime () . Voici un exemple utilisant strtotime.

$ data ['created'] = date ('Ymd H: i: s', strtotime ("+ 1 semaine"));


6

Vous pouvez utiliser strtotime ()
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));


6

Je sais que c'est une vieille question, mais pour PHP <5.3, vous pouvez essayer ceci:

$date = '05/07/2013';
$add_days = 7;
$date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
//or
$date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');


5
$date = "04/28/2013 07:30:00";

$dates = explode(" ",$date);

$date = strtotime($dates[0]);

$date = strtotime("+6 days", $date);

echo date('m/d/Y', $date)." ".$dates[1];

4

Vous pouvez essayer ceci.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));

3

Simple et meilleur

echo date('Y-m-d H:i:s')."\n";
echo "<br>";
echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";

Essaye ça


3
//add the two day

$date = "**2-4-2016**"; //stored into date to variable

echo date("d-m-Y",strtotime($date.**' +2 days'**));

//print output
**4-4-2016**

2

Utilisez cette fonction addDate () pour ajouter ou soustraire des jours, des mois ou des années (vous aurez également besoin de la fonction auxiliaire reformatDate ())

/**
 * $date self explanatory
 * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
 * $format the format for $date
 **/
    function addDate($date = '', $diff = '', $format = "d/m/Y") {
        if (empty($date) || empty($diff))
            return false;
        $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
        $newdate = strtotime($diff, strtotime($formatedDate));
        return date($format, $newdate);
    }
    //Aux function
    function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
        $date_aux = date_create_from_format($from_format, $date);
        return date_format($date_aux,$to_format);
    }

Remarque: uniquement pour php> = 5.3



1
//Set time zone
date_default_timezone_set("asia/kolkata");
$pastdate='2016-07-20';
$addYear=1;
$addMonth=3;
$addWeek=2;
$addDays=5;
$newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
echo $newdate;

1

Même s'il s'agit d'une vieille question, cette façon de procéder prendrait de nombreuses situations et semble robuste. Vous devez avoir PHP 5.3.0 ou supérieur.

$EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
$EndDateTime->modify('+6 days');
echo $EndDateTime->format('d/m/Y');

Vous pouvez avoir n'importe quel type de format pour la chaîne de date et cela fonctionnerait.

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.