DateTime::setDate()
date_date_set
(PHP 5 >= 5.2.0, PHP 7)
设置 DateTime 对象的日期
说明
面向对象风格public DateTime::setDate(int $year,int $month,int $day): DateTime
过程化风格
date_date_set(DateTime$object,int $year,int $month,int $day): DateTime
设置 DateTime 对象的日期。
参数
- $object
仅过程化风格:由date_create()返回的DateTime类型的对象。此函数会修改这个对象。
- $year
年份。
- $month
月份。
- $day
日。
返回值
返回被修改的 DateTime 对象,或者在失败时返回FALSE
.
更新日志
版本 | 说明 |
---|---|
5.3.0 | 将返回值从NULL 改为DateTime类型。 |
范例
Example #1DateTime::setDate()例程
面向对象风格
<?php $date = new DateTime(); $date->setDate(2001, 2, 3); echo $date->format('Y-m-d'); ?>
过程化风格
<?php $date = date_create(); date_date_set($date, 2001, 2, 3); echo date_format($date, 'Y-m-d'); ?>
以上例程会输出:
2001-02-03
超出范围的部分会向上一级增加
<?php $date = new DateTime(); $date->setDate(2001, 2, 28); echo $date->format('Y-m-d') . "\n"; $date->setDate(2001, 2, 29); echo $date->format('Y-m-d') . "\n"; $date->setDate(2001, 14, 3); echo $date->format('Y-m-d') . "\n"; ?>
以上例程会输出:
2001-02-28 2001-03-01 2002-02-03
参见
- DateTime::setISODate() 设置 ISO 日期
- DateTime::setTime() 设置 DateTime 对象的时间
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
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.
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