• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • DateTime::setDate()

    date_date_set

    (PHP 5 >= 5.2.0, PHP 7)

    设置 DateTime 对象的日期

    说明

    面向对象风格
    publicDateTime::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