Я пытаюсь заменить текущий день на последний день месяца, но ошибка возвращается
Вызов функции-члена setDate () для строки
на последней строке. Все работает правильно, кроме функции setDate
//current date which is 2017-08-28 10:50:30
$string = $date1;
$dateM = DateTime::createFromFormat("Y-m-d H:i:s", $string);
//getting the day of the month which is 28
$dateMonth = $dateM->format("d");
//if the day is 28
if($dateMonth >= 28){
//change the day to 31
$dateMonth = 31;
//current date which is 28/08/2017
$out = $date1;
//replace 28 with 31
$date1 = $out->setDate($out->format('Y'), $out->format('m'), $dateMonth , $out->format('H'), $out->format('i'), $out->format('s'));
}
Ты можешь использовать t
в спецификаторе формата на DateTime
«s format
функция.
форматировать персонажа: т
Описание: Количество дней в данном месяце
Пример возвращаемых значений: С 28 по 31
<?php
$input = '2017-08-28 10:50:30';
$date_time = DateTime::createFromFormat('Y-m-d H:i:s', $input);
$last_day_of_month = $date_time->format('Y-m-t H:i:s');
echo $last_day_of_month;
Это дает:
2017-08-31 10:50:30
Демо-версия: https://eval.in/844314
Сообщение об ошибке говорит, что $out
является String
не DateTime
объект. Так ты что-то перепутал.
Может быть, должно быть $out = $dateM;
вместо $out = $date1;
?
настройка $dateMonth
в 31
может не быть хорошей идеей, так как в ближайшие месяцы есть 30 дней. PHP функция данных позволяет использовать t
как формат, который дает вам количество дней в данном месяце. Таким образом, вы можете использовать это, чтобы получить последний день текущего месяца:
date("Y-m-t")