DateTime::setDate

date_date_set

(PHP 5 >= 5.2.0)

DateTime::setDate -- date_date_setУстановка даты

Описание

Объектно-ориентированный стиль

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

Процедурный стиль

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

Переустанавливает текущее значение даты объекта DateTime в новое значение.

Список параметров

object

Только для процедурного стиля: Объект DateTime, возвращаемый date_create(). Функция изменяет этот объект.

year

Год новой даты.

month

Месяц новой даты.

day

День новой даты.

Возвращаемые значения

Возвращает объект DateTime для применения в цепи методов или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
5.3.0Изменено значение успешной работы функции с NULL на DateTime.

Примеры

Пример #1 Пример использования DateTime::setDate()

Объектно-ориентированный стиль

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

Пример #2 Значения, превышающие диапазон своего поля, добавляются к старшим полям

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

Смотрите также

Коментарии

Be warned, DateTime::setDate() does not check for invalid input.

Illustration:
<?php
$dt 
= new DateTime();
$dt->setDate(20121131); // 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.
2012-01-12 00:59:06
http://php5.kiev.ua/manual/ru/datetime.setdate.html
I found a bug:
$date = new \DateTime('first day of this month');
$date->setDate(2001, 2, 3);
echo $date->format('Y-m-d');

This outputs: 2001-02-01
The day never changes.
2017-03-14 13:11:21
http://php5.kiev.ua/manual/ru/datetime.setdate.html
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(201323);
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(201223);
echo 
$date->format('Y-m-d');
?>

Output <=5.6 : 2017-03-31 => 2012-02-29
Output >=7.0 : 2017-03-31 => 2012-02-03
2017-04-05 12:16:46
http://php5.kiev.ua/manual/ru/datetime.setdate.html
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
2017-04-05 12:26:26
http://php5.kiev.ua/manual/ru/datetime.setdate.html
Indjeto: You creating the datetime object with the first day of the month you are currently in when you initialize the object. Then you reset the date to the date you entered. Then you output, which is the day you entered because thats what you set it to. If you want to see the result you are assumed to be expecting you should not run the setDate() method.
2017-04-07 23:00:21
http://php5.kiev.ua/manual/ru/datetime.setdate.html

    Поддержать сайт на родительском проекте КГБ