Главная
Laravel
Carbon, работа с датой временем в Laravel
Некоторые готовые примеры работы с датой и временем в laravel с помощью Carbon
Документация
https://carbon.nesbot.com/docs/#api-getters
Подключение к файлу
use Carbon\ Carbon ;
Дата из строки
$date = Carbon :: parse ( '02.12.2024' );
$date = new Carbon ( '02.12.2024' );
Сейчас
$date = new Carbon ( 'now' );
$date = new Carbon ();
$date = Carbon :: parse ( 'now' );
Сегодня
$date = new Carbon ( 'today' );
Получение даты из строки с возвращением false, если извлечь дату из строки невозможно
try {
return Carbon :: parse ( 'sdf024' );
} catch (\ Exception $e ) {
return false ;
}
Вывод даты в нужном формате
Carbon :: parse ( 'today' )-> isoFormat ( 'YYYY-MM-DD' );
Получение даты в миллисекундах
Carbon :: parse ( 'today' )-> timestamp ;
$dateFrom -> getTimestamp ();
Этот же день в следующем месяце
$firstDay -> next ( 'month' );
Вывод в формате isoString
$dateFrom = $dateFrom -> toISOString (); //"2023-04-01T00:00:00.000000Z"
Важное примечание: Получаю методом parse дату
Carbon :: parse ( '2023-01-31T17:58:56+03:00' );
На выходе имею "2023-01-31T14:58:56.000000Z"
Далее получаю начало месяца
Carbon :: parse ( '2023-01-31T17:58:56+03:00' )-> startOfMonth ();
"2022-12-31T21:00:00.000000Z"
Далее мне надо получить месяц
Carbon :: parse ( '2023-01-31T17:58:56+03:00' )-> startOfMonth ()-> month ;
1
Все правильно
Далее сохраняю в timestamp, и из timestamp снова создаю дату и беру месяц и получаю предыдущий.
$startOfMonth = Carbon :: parse ( '2023-01-31T17:58:56+03:00' )-> startOfMonth ()-> timestamp ;
$month = Carbon :: createFromTimestamp ( $startOfMonth )-> month ;
12
По моему это bug.
В общем обойти это можно так. Распарсить дату, сразу перевести ее в timestamp, затем из этого timestamp создать новую дату и уже из нее взять начало месяца.
$dateTimestamp = Carbon :: parse ( '2023-01-31T17:58:56+03:00' )-> timestamp ;
$date = Carbon :: createFromTimestamp ( $dateTimestamp );
$startOfMonth = $date -> startOfMonth ();
$month = $startOfMonth -> month ;
1
Еще примечание: вот так лучше не делать
$mas [ Carbon :: create ( 2024 , 03 , 23 )-> timestamp ];
лучше в отдельную переменную записать timestamp и ее уже использовать как ключ
ыва