PHP 5.6.0beta1 released

DateTime::add

date_add

(PHP 5 >= 5.3.0)

DateTime::add -- date_add Ajoute une durée à un objet DateTime

Description

Style orienté objet

public DateTime DateTime::add ( DateInterval $interval )

Style procédural

DateTime date_add ( DateTime $object , DateInterval $interval )

Ajoute la durée de l'objet DateInterval à l'objet DateTime.

Liste de paramètres

object

Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.

interval

Un objet DateInterval

Valeurs de retour

Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec DateTime::add()

Style orienté objet

<?php
$date 
= new DateTime('2000-01-01');
$date->add(new DateInterval('P10D'));
echo 
$date->format('Y-m-d') . "\n";
?>

Style procédural

<?php
$date 
date_create('2000-01-01');
date_add($datedate_interval_create_from_date_string('10 days'));
echo 
date_format($date'Y-m-d');
?>

Les exemples ci-dessus vont afficher :

2000-01-11

Exemple #2 Autres exemples avec DateTime::add()

<?php
$date 
= new DateTime('2000-01-01');
$date->add(new DateInterval('PT10H30S'));
echo 
$date->format('Y-m-d H:i:s') . "\n";

$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P7Y5M4DT4H3M2S'));
echo 
$date->format('Y-m-d H:i:s') . "\n";
?>

L'exemple ci-dessus va afficher :

2000-01-01 10:00:30
2007-06-05 04:03:02

Exemple #3 Attention à l'ajout de mois

<?php
$date 
= new DateTime('2000-12-31');
$interval = new DateInterval('P1M');

$date->add($interval);
echo 
$date->format('Y-m-d') . "\n";

$date->add($interval);
echo 
$date->format('Y-m-d') . "\n";
?>

L'exemple ci-dessus va afficher :

2001-01-31
2001-03-03

Notes

DateTime::modify() est une alternative pouvant être utilisée avec PHP 5.2.

Voir aussi

add a note add a note

User Contributed Notes 4 notes

up
16
Anonymous
3 years ago
Note that the add() and sub() methods will modify the value of the object you're calling the method on! This is very untypical for a method that returns a value of its own type. You could misunderstand it that the method would return a new instance with the modified value, but in fact it modifies itself! This is undocumented here. (Only a side note on procedural style mentions it, but it obviously does not apply to object oriented style.)
up
4
artaxerxes2 at iname dot com
6 months ago
Be careful that the internal timer to your DateTime object can be changed drastically when adding even 1 second, during the switch from DST to normal.
Consider the following:
<?php

$ts
= 1383458399; /* 2013-11-03 01:59:59 in Eastern Saving Time */
$dst = DateTime::createFromFormat('U',$ts, new DateTimeZone('GMT')); /* timezone is ignored for a unix timestamp, but if we don't put it, php throws warnings */
$dst->setTimeZone(new DateTimeZone('EST5EDT')); /* a timezone effectuating the change */
$second = new DateInterval('PT1S'); /* one second */

echo $ts . "\t" . $dst->format("U\tY-m-d H:i:s T") . "\n";

$dst->add($second);
$ts++;

echo
$ts . "\t" . $dst->format("U\tY-m-d H:i:s T") . "\n";

/* results:
1383458399    1383458399    2013-11-03 01:59:59 EDT
1383458400    1383462000    2013-11-03 02:00:00 EST

noticed how the second column went from 1383458399 to 1383462000 even though only 1 second was added?
*/

?>
up
4
glavic at gmail dot com
7 months ago
If you need add() and sub() that don't modify object values, you can create new methods like this:

<?php

class DateTimeEnhanced extends DateTime {

    public function
returnAdd(DateInterval $interval)
    {
       
$dt = clone $this;
       
$dt->add($interval);
        return
$dt;
    }
   
    public function
returnSub(DateInterval $interval)
    {
       
$dt = clone $this;
       
$dt->sub($interval);
        return
$dt;
    }

}

$interval = DateInterval::createfromdatestring('+1 day');

$dt = new DateTimeEnhanced; # initialize new object
echo $dt->format(DateTime::W3C) . "\n"; # 2013-09-12T15:01:44+02:00

$dt->add($interval); # this modifies the object values
echo $dt->format(DateTime::W3C) . "\n"; # 2013-09-13T15:01:44+02:00

$dtNew = $dt->returnAdd($interval); # this returns the new modified object and doesn't change original object
echo $dt->format(DateTime::W3C) . "\n"; # 2013-09-13T15:01:44+02:00
echo $dtNew->format(DateTime::W3C) . "\n"; # 2013-09-14T15:01:44+02:00
up
-2
fortruth at mabang dot net
3 years ago
adding 15 min to a datetime

<?php
$initDate
= new DateTime("2010/08/24");

$initDate->add(new DateInterval("PT15M"));
echo
$initDate->format("Y/m/d m:i:s");//result: 2010/08/24 08:15:00
?>

period:
P1Y2M3DT1H2M3S

period time:
PT1H2M3S
To Top