Вызов функции-члена setDate () для строки

Я пытаюсь заменить текущий день на последний день месяца, но ошибка возвращается

Вызов функции-члена 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'));
}

-4

Решение

Ты можешь использовать 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

0

Другие решения

Сообщение об ошибке говорит, что $out является String не DateTime объект. Так ты что-то перепутал.

Может быть, должно быть $out = $dateM; вместо $out = $date1;?

0

настройка $dateMonth в 31 может не быть хорошей идеей, так как в ближайшие месяцы есть 30 дней. PHP функция данных позволяет использовать t как формат, который дает вам количество дней в данном месяце. Таким образом, вы можете использовать это, чтобы получить последний день текущего месяца:

date("Y-m-t")

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector