Установите конец дня вместо 00:00:00 в laravel - PullRequest
0 голосов
/ 08 января 2019

Когда мы передаем значение даты, подобное этому 2019-01-01 без времени 10:00:00, время по умолчанию равно 00:00:00. Итак, наконец, значение, совместимое с БД, преобразуется в это: 2019-01-01 00:00:00. Как я могу принудительно установить значение по умолчанию 23:59:00?

Пример: мне нужно установить атрибут expiry_date, но если я возьму только введенную пользователем дату 2019-01-08, пользователь будет предполагать, что у него будет весь день как дата истечения срока действия, хотя в действительности это истекает в самую первую секунду 2019-01-08 из-за неявного времени по умолчанию 00:00:00.

Как мне преодолеть это? Как я могу установить мутатор для expiry_date, который превратит этот 2019-01-01 00:00:00 в этот 2019-01-01 23:59:00?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Просто используйте следующее:

$expiryDate = Carbon::createFromFormat('Y-m-d', $date)->endOfDay()->toDateTimeString();

Для этого потребуется дата (при необходимости обновить формат даты), переключиться на конец дня и преобразовать полученный объект в строку даты и времени.

Или используйте его как установщик атрибутов:

/**
 * @param $value
 */
public function setExpiryDateAttribute($value)
{
    $this->attributes['expiry_date'] = Carbon::createFromFormat('Y-m-d', $value)
        ->endOfDay()
        ->toDateTimeString();
}
0 голосов
/ 08 января 2019

Вы можете использовать что-то вроде функции strtotime () для добавления чего-либо в текущую метку времени. $expiry_date = date("Y-m-d H:i:s", strtotime('+5 hours')).

Если вам нужны переменные в функции, вы должны использовать двойные кавычки, а затем, например, strtotime ("+ {$ hours} hours"), однако лучше использовать strtotime(sprintf("+%d hours", $hours)) тогда.

...