DateTime::setDate

date_date_set

(PHP 5 >= 5.2.0)

DateTime::setDate -- date_date_setSets the date

說明

物件導向風格

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

程序化風格

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

Resets the current date of the DateTime object to a different date.

參數

object

僅為程序化風格:由 date_create() 回傳的 DateTime 類型的物件。此函式會修改這個物件。

year

Year of the date.

month

Month of the date.

day

Day of the date.

回傳值

回傳被修改的 DateTime 物件, 或者在失敗時回傳 FALSE.

更新日誌

版本 說明
5.3.0將回傳值從NULL改為 DateTime 類型。

範例

Example #1 DateTime::setDate() example

物件導向風格

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

程序化風格

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

上例將輸出:

2001-02-03

Example #2 Values exceeding ranges are added to their parent values

<?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";
?>

上例將輸出:

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

參見

add a note add a note

User Contributed Notes 3 notes

up
8
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
-2
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