DateTime::setDate

date_date_set

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DateTime::setDate -- date_date_setAssigne la date

Description

Style orienté objet

public DateTime::setDate(int $year, int $month, int $day): DateTime

Style procédural

date_date_set(
    DateTime $object,
    int $year,
    int $month,
    int $day
): DateTime

Assigne la date courante de l'objet DateTime à une nouvelle date.

Liste de paramètres

object

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

year

Année de la date.

month

Mois de la date.

day

Jour de la date.

Valeurs de retour

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

Exemples

Exemple #1 Exemple avec DateTime::setDate()

Style orienté objet

<?php
$date 
= new DateTime();
$date->setDate(200123);
echo 
$date->format('Y-m-d');
?>

Style procédural

<?php
$date 
date_create();
date_date_set($date200123);
echo 
date_format($date'Y-m-d');
?>

Les exemples ci-dessus vont afficher :

2001-02-03

Exemple #2 Les valeurs qui dépassent leurs bornes sont ajoutées à leur parent

<?php
$date 
= new DateTime();

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

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

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

L'exemple ci-dessus va afficher :

2001-02-28
2001-03-01
2002-02-03

Voir aussi

add a note add a note

User Contributed Notes 3 notes

up
7
kevin dot nadin at gmail dot com
7 years ago
Be carreful about this bug in php 5.6 and lower (fixed in php 7.0 and higher) :

<?php
$date
= new DateTime("first day of last month");
echo
$date->format('Y-m-d');
echo 
' => ' ;
$date->setDate(2013, 2, 3);
echo
$date->format('Y-m-d');
?>

Output <=5.6 : 2017-03-01 => 2013-02-01
Output >=7.0 : 2017-03-31 => 2013-02-03

Same goes for "Last day of last month", and the funny part, it will take the last day of the new month setted by setDate

Example with a Leap Year :
<?php
$date
= new DateTime("last day of last month");
echo
$date->format('Y-m-d');
echo 
' => ' ;
$date->setDate(2012, 2, 3);
echo
$date->format('Y-m-d');
?>

Output <=5.6 : 2017-03-31 => 2012-02-29
Output >=7.0 : 2017-03-31 => 2012-02-03
up
3
remy215 at laposte dot net
12 years ago
Be warned, DateTime::setDate() does not check for invalid input.

Illustration:
<?php
$dt
= new DateTime();
$dt->setDate(2012, 11, 31); // returns DateTime object and not false although this date does not exist
echo $dt->format('Y-m-d'); // output: 2012-12-01
?>

No error was generated on entering a non existing date, php silently changed it.
up
-1
kevin dot nadin at gmail dot com
7 years ago
Correction on the previous comment :

Bug fixed in php 7.0.17 and 7.1.3, for the version 7.0.0 to 7.0.16 and 7.1.0 to 7.1.2, the bug is still present
To Top