Carbon, работа с датой временем в Laravel

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 и ее уже использовать как ключ


ыва