Carbon — простой и функциональный инструмент PHP для работы с датой и временем


Содержание материала:

Laravel Carbon, как форматировать для сравнения даты и времени?

Я работаю над приложением по бронированию, получаю от пользователя начало и конец (дата / время) и проверяю этот период (начало) & конец) пересекаются со столбцами базы данных (начало & конец) так что мне нужно сравнить Input[‘start’] а также Input[‘end’] с базой данных, поэтому я использовал Carbon::create($inputstart)->between($start ,$end)); но это всегда дает ошибки «Неожиданные данные» & «Трейлинг данных»

Вот метод контроллера для проверки и сохранения ввода

Я также объявил столбцы базы данных в модели как даты

Как я могу передать формат даты и времени из формы HTML и базы данных «datetime», чтобы Carbon мог провести сравнение между ними?

Решение

Похоже, вы уже создали свой экземпляр Carbon для переменной $ end со строкой

Итак, если вы хотите определить, находится ли $ end между $ bstart и $ bend, то вы бы хотели, чтобы ваша строка выглядела так

Если это не сработает, dd($end) вместе с dd($bstart) а также dd($bend) чтобы убедиться, что они все объекты углерода.

PHP Carbon, получить все даты между диапазоном дат?

Как я могу получить все даты между двумя датами в PHP? Предпочитайте использование углерода для дат.

Я хочу иметь все даты между этими двумя датами. Но как? Можно найти решения только с помощью функции strtotime.

Вот как я это сделал с Carbon

Поскольку Carbon является расширением встроенного в DateTime PHP, вы должны иметь возможность использовать DatePeriod и DateInterval точно так же, как и для объекта DateTime

РЕДАКТИРОВАТЬ

Если вам нужно включить окончательную дату периода, вам нужно немного изменить его и настроить $to до создания DatePeriod

Основываясь на ответе Марка Бейкера, я написал эту функцию:

Вы также можете передать логический ( false ) в качестве третьего аргумента, чтобы исключить дату окончания.

Вы не можете напрямую использовать переменную управления контуром, следующая должна работать нормально

Это также можно сделать следующим образом:

Просто имейте в виду, что DatePeriod – это итератор, поэтому, если вы хотите иметь реальный массив:

Если вы используете Laravel, вы всегда можете создать макрос Carbon:

Carbon — простой и функциональный инструмент PHP для работы с датой и временем

Для работы с датами в PHP есть три пути.

Первый вариант подходит только для примитивных расчётов. Не потому, что функции плохи, а потому, что в PHP их мало и ими неудобно пользоваться (интерфейс для машин, а не для людей). Встроенные классы тоже не сильно облегчают задачу. Они работают на низком уровне и простые операции в стиле «получить дату, которая была неделю назад» становятся целым приключением.

В этом уроке мы рассмотрим третий вариант. Самым популярным сторонним решением для работы с датами в PHP является библиотека Carbon.

В целом принцип работы этой библиотеки совпадает с принципом работы Collect . Создавая объект, мы как бы «оборачиваем» дату, делая её внутренним состоянием объекта. Затем выполняем необходимые операции, используя соответствующие методы. Когда нам снова понадобится дата, то мы сможем её извлечь.

Библиотека Carbon обширна и включает в себя невероятно большое количество методов. Мы рассмотрим буквально несколько, а за остальными добро пожаловать в официальную документацию.

Carbon — простой и функциональный инструмент PHP для работы с датой и временем

Посмотрите уроки по веб-разработке:
webformyself.com/hivideo/
В данном уроке мы с Вами рассмотрим замечательный инструмент по работе с вышеуказанной информацией под названием Carbon.
Как Вы знаете, в структуре языка PHP, есть довольно функциональный класс, для работы с датой и временем, под названием DateTime . Который отлично справляется с типовыми задачами, но порой его функционала все же не достаточно. То есть хотелось бы иметь в распоряжении больше методов, которые добавляют удобства и легкости в работе с датой и временем.
Как раз эту проблему и решает расширение под названием Carbon. По сути — это обычный класс, который расширяет функционал вышеуказанного класса, добавляя к нему множество интересных методов по созданию и преобразованию даты и времени.

Коментари

преди 10 месеца

Метод closest означает ближайшую дату как из будущего так и из прошлого?

Carbon — простой и функциональный инструмент PHP для работы с датой и временем

Освойте бесплатно наиболее простой, быстрый и гибкий способ создавать адаптивные веб-сайты.

Дизайн лендинга

Создавайте дизайн любых сайтов — для себя и на заказ!

Популярное

  • Главная
  • ->
  • Материалы
  • ->
  • 23 замечательных PHP-библиотеки, о которых вам стоит знать

Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Бесплатный Курс «Практика HTML5 и CSS3»

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Что нужно знать для создания PHP-сайтов?

Ответ здесь. Только самое важное и полезное для начинающего веб-разработчика.

Узнайте, как создавать качественные сайты на PHP всего за 2 часа и 27 минут!

Создайте свой сайт за 3 часа и 30 минут.

После просмотра данного видеокурса у Вас на компьютере будет готовый к использованию сайт, который Вы сделали сами.

Вам останется лишь наполнить его нужной информацией и изменить дизайн (по желанию).

Изучите основы HTML и CSS менее чем за 4 часа.


После просмотра данного видеокурса Вы перестанете с ужасом смотреть на HTML-код и будете понимать, как он работает.

Вы сможете создать свои первые HTML-страницы и придать им нужный вид с помощью CSS.

Бесплатный курс «Сайт на WordPress»

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Хотите изучить JavaScript, но не знаете, как подступиться?

После прохождения видеокурса Вы освоите базовые моменты работы с JavaScript.

Развеются мифы о сложности работы с этим языком, и Вы будете готовы изучать JavaScript на более серьезном уровне.

*Наведите курсор мыши для приостановки прокрутки.

23 замечательных PHP-библиотеки, о которых вам стоит знать

Сейчас очень хорошее время для того, чтобы быть PHP-разработчиком. Есть множество библиотек, которые выходят чуть ли не каждый день, а такие ресурсы, как Composer и Github помогают нам легко их найти и начать использовать.

Ниже вы найдете 23 классных библиотеки, о которых я хочу вам рассказать.

1. Dispatch – Микро-фреймворк

Dispatch — это минималистичный PHP-фреймворк. Он не дает вам полноценной MVC-структуры, но вы можете назначить правила и методы обработки URL-адресов чтобы лучше организовать ваше приложение. Это удобно для API, простых сайтов и прототипов:

Вы сможете настроить определенные типы HTTP-запросов и пути, отрисовывать виды и др. Если вы объедините Dispatch с другим фреймвороком, то получите действительно мощный и легкий инструмент.

2. Klein – молниеносный роутер для PHP

Klein — еще одна легковесная библиотека маршрутизации для PHP 5.3+. У нее чуть более многословный синтаксис по сравнению с Dispatch, однако она также очень быстра. Вот пример:

Вы также можете настраивать различные HTTP-методы и использовать регулярные выражения при формировании путей:

Это отличное решение для маленьких проектов, но вам следует быть очень дисциплинированным во время использования библиотеки для более крупных проектов, потому что очень быстро ваш код может превратиться в нечитабельный и трудный для обслуживания.

В этом случае лучше будет посмотреть в сторону полноценных MVC-фреймворков, вроде Laravel или CodeIgniter.

3. Ham – библиотека маршрутизации с кэшированием

Ham — это тоже легкая библиотека маршрутизации, а для еще большего выигрыша в скорости она использует кэширование. Пример:

Для работы этой библиотеки требуется установка XCache или APC, что означает, что у большинства хостеров работать она не будет. Но если что-то из этого установлено, либо вы самостоятельно настраиваете веб-сервер, то вам стоит попробовать этот очень быстрый фреймворк.

4. Assetic – управление ресурсами

Assetic — это фреймворк для управления ресурсам под PHP. Он позволяет удобно управляться с вашими CSS и JS-файлами. Вот как он используется:

Группировка ресурсов в такой манере — хорошая идея, т.к. это позволяет ускорить работу вашего сайта. Помимо того, что уменьшается объем скачиваемых данных, убирается еще и множество ненужных HTTP-запросов (это две вещи, которые больше всего влияют на общее время загрузки страницы).

5. ImageWorkshop – манипуляция изображениями со слоями

ImageWorkshop — это библиотека с открытым исходным кодом, которая позволяет вам манипулировать изображениями со слоями.

С ее помощью вы сможете изменять размер изображений, обрезать их, делать миниатюры, наносить водяные знаки и многое другое. Пример:

ImageWorkshop создана для того, чтобы облегчить выполнение типичных задач с изображениями средствами PHP. Однако, если вам не хватает ее возможностей, вы можете обратить свое внимание на библиотеку Imagine.

6. Snappy – PDF-библиотека

Snappy — это библиотека, которая умеет делать «снимки» или PDF-документы из URL-сдресов или HTML-документов. Она зависит от wkhtmltopdf, которая доступна под Linux, Windows и OSX. Применяется она примерно так:

Помните о том, что вызов внешних бинарных кодов может быть запрещен вашим хостинг-провайдером.

7. Idiorm – Легкая ORM-библиотека

Idiorm — это легкая ORM-библиотека и средство быстрого построения PDO-запросов. C этой библиотекой вы забудете про утомительное написание SQL-запросов:

У Idiorm есть «сестринская» библиотека Paris, являющаяся реализацией подхода Active Record и построенная на основе Idiorm.

8. Requests – Простые HTTP-запросы

Requests — это библиотека, которая упрощает работу с HTTP-запросами. Если вы похожи на меня и тоже не можете запомнить все те параметры, которые можно пердавать в Curl, то это для вас:

Используя эту библиотеку, вы сможете отправлять запросы HEAD, GET, POST, PUT, DELETE и PATCH HTTP, добавлять файлы и параметры с помощью массивов и получать доступ ко всем даннным, возвращенным в ответе сервера.

9. Buzz – простая библиотека для работы с HTTP-запросам

Buzz — еще одна библиотека для удобной работы с HTTP-запросами. Вот пример:

Она слабовата в части документации, поэтому вам придется посмотреть код самостоятельно, чтобы проникнуться всеми возможностями, которые она предоставляет. Как вариант — вы можете использовать библиотеку Request, о которой я упоминал немногим ранее.

10. Goutte – Библиотека парсинга

Goutte — это библиотека для того, чтобы «грабить» содержимое страниц и извлекать с них определенные данные. Она предоставляет хороший API, который упрощает выбор тех или иных элементов на удаленной странице.

11. Carbon – Библиотека для работы с датой и временем

Carbon — это простое API-расширение для DateTime. Оно расширеят класс некоторыми полезными методами для работы с датой и временем, например:

12. Ubench – Микро-библиотека для проведения тестирования приложения

Ubench — это маленькая библиотека для тестирования вашего PHP-кода. Она мониторит время выполнения скрипта и использование памяти. Пример:

Хорошая идея — запускать такие проверки только во время разработки приложения.

13. Validation – движок для валидации входящих данных

Validation претендует на звание самой удобной библиотеки валидации когда-либо созданной для PHP. Посмотрите сами:

С помощью этой библиотеки вы можете производить валидацию форм или других данных, отправленных пользователм. В дополнение ко всему, она поддерживает широкий спект проверок, обработку исключений и настраиваемые сообщения об ошибках.

14. Filterus – библиотека фильтрации

Filterus — еще одна библиотека подобного плана, но она умеет не только производить валидацию, но и фильтровать данные, чтобы они соответствовали определенному шаблону. Например:

В Filterus есть множество встроенные паттернов, поддержка цепочечного синтаксиса и, более того, она может производить валидацию элементов массива по индивиудальным правилам.

Топ-пост этого месяца:  Карта sitemap для сайта wordpress и варианты ее создания

15. Faker – генератор случайных данных

Faker — это PHP-библиотека, которая генерирует для вас случайные данные. Это может быть полезно, когда вам нужно заполнить базу данных тестовой информацией или сгенерировать бессмысленный контент при отладке веб-приложения. Используется очень просто:

До тех пор пока вы будете обращаться к свойствам объекта, он будет продолжать возвращать случайно сгенерированные данные.

16. Mustache.php – элегантная библиотека работы с шаблонами

Mustache — популярный язык шаблонов, имеющий реализацию практически во всех основных языках программирования. Она дает вам возможность повторно использовать ваши шаблоны как на стороне клиента, так и на стороне сервера. Mustache.php, как вы догадались — это реализация, которая использует PHP:

Продвинутые приемы работы можно посмотреть в официальной документации Mustache docs.

17. Gaufrette – абстрактный уровень работы с файловой системой


Gaufrette — это библиотека, которая предоставляет абстрактный уровень для работы с файловой системой. Благодаря этому вы можете работать с локальными файлами, FTP-сервером, Amazon S3 и другими файлами одинаково.

Такой подход позволяет вам не беспокоиться о том, чтобы заранее знать, каким именно образом вам потребуется получать доступ к файлам в будущем. По сути — принцип инкапсуляции в действии.

Также в данной библиотеке доступна опция кэширования.

18. Omnipay – библиотека обработки платежей

Omnipay — это библиотека обработки платежей для PHP. У нее понятный и последовательный API и с ее помощью, изучив лишь один API, вы сможете работать с большим числом различных платежных процессоров. Например:

Использование четкого и понятного API делает удобной работу с рядом платежных процессоров.

19. Upload – для обработки загружаемых файлов

Upload — библиотека, которая облегчает загрузку и валидацию файлов. Когда форма отправлена, библиотека может проверить тип файла и его размер:

Она позволит вам сэкономить массу времени на написание утомительного кода.

20. HTMLPurifier – XSS-защита

HTMLPurifier (на github) — это библиотека для фильтрации HTML, которая защищает ваш код от XSS-атак благодаря использванию надежных «белых листов» и агрессивному парсингу URL-адресов. Кроме того, она позволяет вам отследить факт того, что разметка соответствует стандартам.

Наиболее подходящее применение библиотеки — это случай, когда вы разрешаете пользователям вводить HTML-разметку, которая затем в немодифицированном виде будет выведена на сайт.

21. ColorJizz-PHP – библиотека работы с цветами

ColorJizz — это маленькая библиотека, которая умеет конвертировать между собой разные форматы представления цвета и знакома с простой «цветовой арифметикой»:

22. PHP Geo – библиотека геолокации

PHP Geo — это простая библиотека, которая с высокой точностью подсчитывает расстояния между произвольными географическим точками. Например:

Это отличный инструмент для приложений, где используются данные о местоположении чего-либо. Для получения координат вы можете использовать HTML5 Location API, Yahoo’s API (или оба, как это сделано в примере с данным приложением)

23. ShellWrap – оболочка для командной строки

ShellWrap — это библиотека, которая позволяет вам использовать мощные средства командой строки Linux/Unix в PHP с использованием приятного синтаксиса:

Библиотека выбрасывает исключение, когда в команде происходит ошибка, поэтому вы можете действовать соответствующим образом. И, как уже упоминалось в комментариях, для еще большей гибкости вы можете направлять вывод одной команды на вход другой.

По материалам http://tutorialzine.com
Перевод: Дмитрий Науменко

P.S. Хотите двигаться дальше в освоении PHP? Обратите внимание на премиум-уроки по различным аспектам сайтостроения, включая программирование на PHP, а также на бесплатный курс по созданию своей CMS-системы на PHP с нуля. Все это поможет вам быстрее и проще освоить этот мощный язык веб-разработки:

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!

Дата и время – метод OOP

Расширение PHP Date/Time представляет собой набор классов, которые позволяют решать практически все задачи, связанные с датой и временем.

Оно стало доступно с выходом PHP 5.2 , и на текущий момент в него добавилось еще несколько новых классов, каждый из которых предназначен для реализации конкретных сценариев.

  • Дата или время представляются объектом DateTime;
  • Часовой пояс представляется объектом DateTimeZone;
  • Объекты DateInterval представляют временной интервал. Например, когда мы говорим, что с этого момента прошло два дня, то в этом случае « два дня » как раз является временным интервалом. Объект DateInterval не указывает на конкретную дату или время;
  • Объекты DatePeriod задают период между двумя конкретными датами.

А теперь не позволите ли мне дать два вам два небольших совета: оба, я уверен, помогут вам в решении практических задач.

От date() к DateTime

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

Функция DateTime дает нам намного больше, чем просто возможность выводить в нужном формате дату и время. Однако прежде, чем мы пойдем дальше, вам нужно будет создать новый объект DateTime , который представляет дату и / или время.

После этого мы сможем выполнять различные интересные манипуляции с ним. Новый объект создается точно так же, как и любой другой класс PHP :

Конструктор по умолчанию принимает для него значение « сейчас » — текущие время и дата. Чтобы создать объект для определенной даты, вы должны присвоить ему значение этих даты и времени.

Определение форматов для объекта, как правило очень интуитивно. Ниже приводятся несколько примеров создания объектов DateTime :

Когда PHP не может распознать формат, он будет добавлять этот случай в исключения. Полный список доступных форматов можно найти в сопроводительной документации .

Если в ней отсутствует нужный вам формат, вы всегда можете задать свой собственный с помощью функции DateTime :: createFromFormat :

Теперь, когда у нас есть объект DateTime , мы довольно легко можем сделать с ним кучу интересных вещей.

Формат времени для Unix:

Изменение даты/времени:

Обратите внимание, что, если задается значение, выходящее за границы диапазона, PHP соответственно модифицирует дату. Например, запись $date->setDate(2013, 12, 35); будет преобразована в дату 2014-01-04. То же самое касается и времени.

Работа с несколькими датами

Теперь, когда вы создали объект DateTime , следующее, что я вам расскажу – это как ваши приложения будут задавать для него значения. Вам понравится работать с датой и временем, как никогда раньше. Теперь вы будете иметь дело с объектами DateTime.

А не строками « строками », которые вы использовали раньше, чтобы задавать значения через функцию StrToTime , когда нужны были некоторые математические вычисления.

Скажем, вам нужно сравнить два дня рождения:

Еще один сценарий сравнения двух дат. Мы можем сравнить их вот таким образом:

Функция diff задает объект DateInterval . Если мы создали для него все соответствующие значения:

Это публичные свойства. Вы можете создать и собственный привлекательный формат вывода объекта DateInterval :

Но самое главное, что интервал, заданный в объекте DateInterval , можно применить к другому объекту DateTime :

Примечание : Изменения в объекте DateTime, такие как, например, добавление данных, не создает новые объекты DateTime – все изменения производятся с исходным объектом. Всегда помните об этом, когда ваши приложения используют объекты DateTime.

В PHP 5.5 введен новый класс, который задает новые объекты, не поддерживавшиеся предыдущими версиями.
Функция diff не единственный способ, которым можно генерировать объект DateInterval . Так как это отдельный класс, новые объекты можно инициировать обычным способом:

Значения года / месяца / дня и т.д., передаются в конструктор в виде строки. Более подробную информацию можно найти в справочной документации .

Работа с часовыми поясами

При создании новых объектов DateTime, второй аргумент конструктора предназначен для задания часового пояса. Если мы пропускаем его, тогда часовой пояс присваивается по умолчанию, на основании значения date.timezone файла php.ini. Вы можете изменить его в любое время через функцию date_default_timezone_set :

Вы также можете изменить часовые пояса по ходу работы. Для этого, как вы уже догадались, сначала мы должны создать объект Timezone :

Также вы можете задать часовой пояс при создании нового объекта DateTime :

Опять же, важно помнить, что функция setTimezone изменяет ваш исходный объект DateTime. Обычно, когда мы используем метод setTimezone задача у нас стоит так: « привязать эту дату, к этому часовому поясу ». В последнем же примере нам наоборот нужно было « создать дату в конкретном часовом поясе ».

Список часовых поясов доступен в онлайн-документации .

DatePeriods

Я думаю, что в официальном руководстве дано наиболее подходящее определение:
« DatePeriods позволяет перечислить множества дат и времен, повторяющихся через определенные интервалы времени в течение заданного периода ».

DatePeriod позволяет создать набор объектов DateTimes, используя два дня, ограничивающие временной интервал. Основными элементами набора являются: дата начала периода, интервал и дата окончания. Для каждого временного интервала создается новый объект DateTime.

Предположим, мы хотим получить все дни рождения Шелдона с момента его рождения:

Результат обработки будет выглядеть таким образом:

Теперь по умолчанию объект DatePeriod включает дату начала временного интервала. Однако с помощью четвертого аргумента можно пропустить начальную дату:


Теперь давайте посмотрим, сколько дней рождения успел отпраздновать Нео, до того, как родился Шелдон:

Расширения

Все классы, которые мы сегодня рассмотрели, могут быть расширены под использование в сочетании с собственными методами. Одно из самых популярных расширений — это использование объекта DateTime с методом __ ToString , которое позволяет выводить корректно DateTime без обращения к формату.

Несколько примеров использования

Лично я в своей практике часто использую объекты DateTime, когда имею дело со столбцами базы данных, в которых записываются значения даты / времени. Все даты хранятся в таблице в виде даты по Гринвичскому времени.

Код приложения работает только с объектами DateTime, однако пока в ходе обработки запроса не будут сгенерированы даты в соответствующих форматах, все они исчисляются в часовом поясе по Гринвичу. Данный подход позволил мне довольно просто работать с датами, которые принадлежат разным часовым поясам.

Я могу работать с временным объектом, исчисляемым по Нью-Йоркскому времени, и не заботиться о его формате, когда данные записываются в базу данных. Я могу легко переключаться между форматом Unix и регулярным форматом даты-времени в любой момент, мои приложения обрабатывают только объекты DateTime.

Я также использовал объект DateInterval , чтобы упростить логику скрипта, обрабатывающего поступающие платежи за подписку. Использовав объекты DateInterval для определения интервалов между двумя регулярными платежами, я сделал его намного проще.

Мне всего лишь нужно применить заданный интервал к дате последней оплаты.
У вас есть свои собственные примеры работы с датой / временем? Поделитесь ими в комментариях.

На будущее

Расширение DateTime может иметь столь большое количество применений. Если вы следите за последними событиями в этой области, то знаете, что появились новые классы и интерфейсы, принятые уже после PHP 5.5 .

С ними вы можете ознакомиться в справочной документации. Спасибо, что уделили внимание моей статье.

Данная публикация представляет собой перевод статьи « Dates and Time – The OOP Way » , подготовленной дружной командой проекта Интернет-технологии.ру

carbon %d0%bf%d1%80%d0%be%d1%81%d1%82%d0%be%d0%b9 %d0%b8 %d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%be%d0%bd%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9 %d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82 php %d0%b4%d0%bb%d1%8f %d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b %d1%81 %d0%b4%d0%b0%d1%82%d0%be%d0%b9 %d0%b8 %d0%b2%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%b5%d0%bc

Comment : Carbon %d0%bf%d1%80%d0%be%d1%81%d1%82%d0%be%d0%b9 %d0%b8 %d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%be%d0%bd%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9 %d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82 php %d0%b4%d0%bb%d1%8f %d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b %d1%81 %d0%b4%d0%b0%d1%82%d0%be%d0%b9 %d0%b8 %d0%b2%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%b5%d0%bc

2020 © WhatAbout.work — Author Tuong Nguyen

All videos under the management of youtube whatabout.work is not responsible for content.

Page rendered in 0.2668 seconds.

Introduction

The Carbon class is inherited from the PHP DateTime class.

You can see from the code snippet above that the Carbon class is declared in the Carbon namespace. You need to import the namespace to use Carbon without having to provide its fully qualified name each time.

Examples in this documentation will assume you imported classes of the Carbon namespace this way.

We also provide CarbonImmutable class extending DateTimeImmutable. The same methods are available on both classes but when you use a modifier on a Carbon instance, it modifies and returns the same instance, when you use it on CarbonImmutable, it returns a new instances with the new value.

The library also provides CarbonInterface interface extends DateTimeInterface and JsonSerializable, CarbonInterval class extends DateInterval, CarbonTimeZone class extends DateTimeZone and CarbonPeriod class polyfills DatePeriod.

Carbon has all of the functions inherited from the base DateTime class. This approach allows you to access the base functionality such as modify, format or diff.

Now, let see how cool is this doc. Click on the code below:

Some examples are static snippets, some other are editable (when there is a top right hand corner expand button). You can also click on this button to open the snippet in a new tab. You can double-click on methods name in both static and dynamic examples.

Топ-пост этого месяца:  Применение в TypeScript и JavaScript localeCompare метод string для возврата числа, указывающего на

Instantiation

There are several different methods available to create a new instance of Carbon. First there is a constructor. It overrides the parent constructor and you are best to read about the first parameter from the PHP manual and understand the date/time string formats it accepts. You’ll hopefully find yourself rarely using the constructor but rather relying on the explicit static methods for improved readability.

You’ll notice above that the timezone (2nd) parameter was passed as a string rather than a \DateTimeZone instance. All DateTimeZone parameters have been augmented so you can pass a DateTimeZone instance, string or integer offset to GMT and the timezone will be created for you. This is again shown in the next example which also introduces the now() function.

If you really love your fluid method calls and get frustrated by the extra line or ugly pair of brackets necessary when using the constructor you’ll enjoy the parse method.

The string passed to Carbon::parse or to new Carbon can represent a relative time (next sunday, tomorrow, first day of next month, last year) or an absolute time (first day of December 2008, 2020-01-06). You can test if a string will produce a relative or absolute date with Carbon::hasRelativeKeywords() .

To accompany now() , a few other static instantiation helpers exist to create widely known instances. The only thing to really notice here is that today() , tomorrow() and yesterday() , besides behaving as expected, all accept a timezone parameter and each has their time value set to 00:00:00 .

The next group of static helpers are the createXXX() helpers. Most of the static create functions allow you to provide as many or as few arguments as you want and will provide default values for all others. Generally default values are the current date, time or timezone. Higher values will wrap appropriately but invalid values will throw an InvalidArgumentException with an informative message. The message is obtained from an DateTime::getLastErrors() call.

createFromDate() will default the time to now. createFromTime() will default the date to today. create() will default any null parameter to the current respective value. As before, the $tz defaults to the current timezone and otherwise can be a DateTimeZone instance or simply a string timezone value. The only special case is for create() that has minimum value as default for missing argument but default on current value when you pass explicitly null .

Create exceptions occurs on such negative values but not on overflow, to get exceptions on overflow, use createSafe()

Note 1: 2020-02-29 produces also an exception while 2020-02-29 does not since 2020 is a leap year.

Note 2: Carbon::createSafe(2014, 3, 30, 1, 30, 0, ‘Europe/London’) also produces an exception as this time is in an hour skipped by the daylight saving time.

Note 3: The PHP native API allow consider there is a year 0 between -1 and 1 even if it doesn’t regarding to Gregorian calendar. That’s why years lower than 1 will throw an exception using createSafe . Check isValid() for year-0 detection.

createFromFormat() is mostly a wrapper for the base php function DateTime::createFromFormat. The difference being again the $tz argument can be a DateTimeZone instance or a string timezone value. Also, if there are errors with the format this function will call the DateTime::getLastErrors() method and then throw a InvalidArgumentException with the errors as the message.

The final three create functions are for working with unix timestamps. The first will create a Carbon instance equal to the given timestamp and will set the timezone as well or default it to the current timezone. The second, createFromTimestampUTC() , is different in that the timezone will remain UTC (GMT), it acts the same as Carbon::parse(‘@’.$timestamp) but I have just made it a little more explicit. The third, createFromTimestampMs() , accepts a timestamp in milliseconds instead of seconds. Negative timestamps are also allowed.

You can also create a copy() of an existing Carbon instance. As expected the date, time and timezone values are all copied to the new instance.

You can use nowWithSameTz() on an existing Carbon instance to get a new instance at now in the same timezone.

Finally, if you find yourself inheriting a \DateTime instance from another library, fear not! You can create a Carbon instance via a friendly instance() method. Or use the even more flexible method make() which can return a new Carbon instance from a DateTime, Carbon or from a string, else it just returns null.

Carbon 2 (requiring PHP >= 7.1) perfectly supports microseconds. But if you use Carbon 1 and PHP «now» instances and cannot be changed afterwards, this means:

To work around this limitation in Carbon, we append microseconds when calling now in PHP = 7.1):

Ever need to loop through some dates to find the earliest or latest date? Didn’t know what to set your initial maximum/minimum values to? There are now two helpers for this to make your decision simple:

Min and max value mainly depends on the system (32 or 64 bit).

With a 32-bit OS system or 32-bit version of PHP (you can check it in PHP with PHP_INT_SIZE === 4 ), the minimum value is the 0-unix-timestamp (1970-01-01 00:00:00) and the maximum is the timestamp given by the constant PHP_INT_MAX .

With a 64-bit OS system and 64-bit version of PHP, the minimum is 01-01-01 00:00:00 and maximum is 9999-12-31 23:59:59. It’s even possible to use negative year up to -9999 but be aware you may not have accurate results with some operations as the year 0 exists in PHP but not in the Gregorian calendar.

Localization

With Carbon 2, localization changed a lot, 751 new locales are supported and we now embed locale formats, day names, month names, ordinal suffixes, meridiem, week start and more. While Carbon 1 provided partial support and relied on third-party like IntlDateFormatter class and language packages for advanced translation, you now benefit of a wide internationalization support. You still use Carbon 1? I hope you would consider to upgrade, version 2 has really cool new features. Else you still read the version 1 documentation of Localization by clicking here.

Unfortunately the base class DateTime does not have any localization support. To begin localization support a formatLocalized($format) method was added. The implementation makes a call to strftime using the current instance timestamp. If you first set the current locale with PHP function setlocale() then the string returned will be formatted in the correct locale.

diffForHumans() has also been localized. You can set the Carbon locale by using the static Carbon::setLocale() function and get the current setting with Carbon::getLocale() .

Or you can isolate some code with a given locale:

Some languages require utf8 encoding to be printed (locale packages that does not ends with .UTF8 mainly). In this case you can use the static method Carbon::setUtf8() to encode the result of the formatLocalized() call to the utf8 charset.

on Linux
If you have trouble with translations, check locales installed in your system (local and production).
locale -a to list locales enabled.
sudo locale-gen fr_FR.UTF-8 to install a new locale.
sudo dpkg-reconfigure locales to publish all locale enabled.
And reboot your system.

Since 2.9.0, you can easily customize translations:

You can use fallback locales by passing in order multiple ones to locale() :

In the example above, it will try to find translations in «xx» in priority, then in «xy» if missing, then in «es», so here, you get «Xday» from «xx», «Yday» from «xy», and «hace» and «minutos» from «es».

Note that you can also use an other translator with Carbon::setTranslator($custom) as long as the given translator implements Symfony\Component\Translation\TranslatorInterface . And you can get the global default translator using Carbon::getTranslator() (and Carbon::setFallbackLocale($custom) and Carbon::getFallbackLocale() for the fallback locale, setFallbackLocale can be called multiple times to get multiple fallback locales) but as those method will change the behavior globally (including third-party libraries you may have in your app), it might cause unexpected results. You should rather customize translation using custom locales as in the example above.

The Carbon translator will use internal directory src/Carbon/Lang to find translations files in it by default but you can change/add/remove directory.

Then you can find all language files across those directories.

You can access some dynamic properties translated by calling following methods with the name of the base property.


Finally, you can get and set messages from the internal cache:

setMessages is equivalent to setTranslations but you can omit the locale as it will use the current one so we recommend to use it when you can as in this previous example.

So the support of a locale for formatLocalized , getters such as localeMonth , localeDayOfWeek and short variants is driven by locales installed in your operating system. For other translations, it’s supported internally thanks to Carbon community. You can check what’s supported with the following methods:

So, here is the new recommended way to handle internationalization with Carbon.

The ->locale() method only change the language for the current instance and has precedence over global settings. We recommend you this approach so you can’t have conflict with other places or third-party libraries that could use Carbon. Nevertheless, to avoid calling ->locale() each time, you can use factories.

You can call any static Carbon method on a factory (make, now, yesterday, tomorrow, parse, create, etc.) Factory (and FactoryImmutable that generates CarbonImmutable instances) are the best way to keep things organized and isolated. As often as possible we recommend you to work with UTC dates, then apply locally (or with a factory) the timezone and the language before displaying dates to the user.

What factory actually do is using the method name as static constructor then call settings() method which is a way to group in one call settings of locale, timezone, months/year overflow, etc. (See references for complete list.)

Factory settings can be changed afterward with setSettings(array $settings) or to merge new settings with existing ones mergeSettings(array $settings) and the class to generate can be initialized as the second argument of the construct then changed later with setClassName(string $className) .

Previously there was Carbon::setLocale that set globally the locale. But as for our other static setters, we highly discourage you to use it. It breaks the principle of isolation because the configuration will apply for every class that uses Carbon.

You also may know formatLocalized() method from Carbon 1. This method still works the same in Carbon 2 but you should better use isoFormat() instead.

->isoFormat(string $format): string use ISO format rather than PHP-specific format and use inner translations rather than language packages you need to install on every machine where you deploy your application. isoFormat method is compatible with momentjs format method, it means you can use same format strings as you may have used in moment from front-end or node.js. Here are some examples:

You can also create date from ISO formatted strings:

->isoFormat use contextualized methods for day names and month names as they can have multiple forms in some languages, see the following examples:

Here is the complete list of available replacements (examples given with $date = Carbon::parse(‘2020-01-05 17:04:05.084512’); ):

Code Example Description
OD 5 Day number with alternative numbers such as 三 for 3 if locale is ja_JP
OM 1 Month number with alternative numbers such as ၀၂ for 2 if locale is my_MM
OY 2020 Year number with alternative numbers such as ۱۹۹۸ for 1998 if locale is fa
OH 17 24-hours number with alternative numbers such as ႑႓ for 13 if locale is shn_MM
Oh 5 12-hours number with alternative numbers such as 十一 for 11 if locale is lzh_TW
Om 4 Minute number with alternative numbers such as ୫୭ for 57 if locale is or
Os 5 Second number with alternative numbers such as 十五 for 15 if locale is ja_JP
D 5 Day of month number (from 1 to 31)
DD 05 Day of month number with trailing zero (from 01 to 31)
Do 5th Day of month with ordinal suffix (from 1st to 31th), translatable
d 4 Day of week number (from 0 (Sunday) to 6 (Saturday))
dd Th Minified day name (from Su to Sa), transatable
ddd Thu Short day name (from Sun to Sat), transatable
dddd Thursday Day name (from Sunday to Saturday), transatable
DDD 5 Day of year number (from 1 to 366)
DDDD 005 Day of year number with trailing zeros (3 digits, from 001 to 366)
DDDo 5th Day of year number with ordinal suffix (from 1st to 366th), translatable
e 4 Day of week number (from 0 (Sunday) to 6 (Saturday)), similar to «d» but this one is translatable (takes first day of week of the current locale)
E 4 Day of week number (from 1 (Monday) to 7 (Sunday))
H 17 Hour from 0 to 23
HH 17 Hour with trailing zero from 00 to 23
h 5 Hour from 0 to 12
hh 05 Hour with trailing zero from 00 to 12
k 17 Hour from 1 to 24
kk 17 Hour with trailing zero from 01 to 24
m 4 Minute from 0 to 59
mm 04 Minute with trailing zero from 00 to 59
a pm Meridiem am/pm
A PM Meridiem AM/PM
s 5 Second from 0 to 59
ss 05 Second with trailing zero from 00 to 59
S Second tenth
SS 08 Second hundredth (on 2 digits with trailing zero)
SSS 084 Millisecond (on 3 digits with trailing zeros)
SSSS 0845 Second ten thousandth (on 4 digits with trailing zeros)
SSSSS 08451 Second hundred thousandth (on 5 digits with trailing zeros)
SSSSSS 084512 Microsecond (on 6 digits with trailing zeros)
SSSSSSS 0845120 Second ten millionth (on 7 digits with trailing zeros)
SSSSSSSS 08451200 Second hundred millionth (on 8 digits with trailing zeros)
SSSSSSSSS 084512000 Nanosecond (on 9 digits with trailing zeros)
M 1 Month from 1 to 12
MM 01 Month with trailing zero from 01 to 12
MMM Jan Short month name, translatable
MMMM January Month name, translatable
Mo 1st Month with ordinal suffix from 1st to 12th, translatable
Q 1 Quarter from 1 to 4
Qo 1st Quarter with ordinal suffix from 1st to 4th, translatable
G 2020 ISO week year (see ISO week date)
GG 2020 ISO week year (on 2 digits with trailing zero)
GGG 2020 ISO week year (on 3 digits with trailing zeros)
GGGG 2020 ISO week year (on 4 digits with trailing zeros)
GGGGG 02020 ISO week year (on 5 digits with trailing zeros)
g 2020 Week year according to locale settings, translatable
gg 2020 Week year according to locale settings (on 2 digits with trailing zero), translatable
ggg 2020 Week year according to locale settings (on 3 digits with trailing zeros), translatable
gggg 2020 Week year according to locale settings (on 4 digits with trailing zeros), translatable
ggggg 02020 Week year according to locale settings (on 5 digits with trailing zeros), translatable
W 1 ISO week number in the year (see ISO week date)
WW 01 ISO week number in the year (on 2 digits with trailing zero)
Wo 1st ISO week number in the year with ordinal suffix, translatable
w 1 Week number in the year according to locale settings, translatable
ww 01 Week number in the year according to locale settings (on 2 digits with trailing zero)
wo 1st Week number in the year according to locale settings with ordinal suffix, translatable
x 1483635845085 Millisecond-precision timestamp (same as date.getTime() in JavaScript)
X 1483635845 Timestamp (number of seconds since 1970-01-01)
Y 2020 Full year from -9999 to 9999
YY 17 Year on 2 digits from 00 to 99
YYYY 2020 Year on 4 digits from 0000 to 9999
YYYYY 02020 Year on 5 digits from 00000 to 09999
YYYYYY +002020 Year on 5 digits with sign from -09999 to +09999
z utc Abbreviated time zone name
zz UTC Time zone name
Z +00:00 Time zone offset HH:mm
ZZ +0000 Time zone offset HHmm

Some macro-formats are also available. Here are examples of each in some languages:

Code en fr ja hr
LT h:mm A
5:04 PM
HH:mm
17:04
HH:mm
17:04
H:mm
17:04
LTS h:mm:ss A
5:04:05 PM
HH:mm:ss
17:04:05
HH:mm:ss
17:04:05
H:mm:ss
17:04:05
L

l

MM/DD/YYYY
01/05/2020
1/5/2020
DD/MM/YYYY
05/01/2020
5/1/2020
YYYY/MM/DD
2020/01/05
2020/1/5
DD.MM.YYYY
05.01.2020
5.1.2020
LL

ll

MMMM D, YYYY
January 5, 2020
Jan 5, 2020
D MMMM YYYY
5 janvier 2020
5 janv. 2020
YYYY年M月D日
2020年1月5日
2020年1月5日
D. MMMM YYYY
5. siječanj 2020
5. sij. 2020
LLL

lll

MMMM D, YYYY h:mm A
January 5, 2020 5:04 PM
Jan 5, 2020 5:04 PM
D MMMM YYYY HH:mm
5 janvier 2020 17:04
5 janv. 2020 17:04
YYYY年M月D日 HH:mm
2020年1月5日 17:04
2020年1月5日 17:04
D. MMMM YYYY H:mm
5. siječanj 2020 17:04
5. sij. 2020 17:04
LLLL

llll

dddd, MMMM D, YYYY h:mm A
Thursday, January 5, 2020 5:04 PM
Thu, Jan 5, 2020 5:04 PM
dddd D MMMM YYYY HH:mm
jeudi 5 janvier 2020 17:04
jeu. 5 janv. 2020 17:04
YYYY年M月D日 dddd HH:mm
2020年1月5日 木曜日 17:04
2020年1月5日 木 17:04
dddd, D. MMMM YYYY H:mm
četvrtak, 5. siječanj 2020 17:04
čet., 5. sij. 2020 17:04

When you use macro-formats with createFromIsoFormat you can specify a locale to select which language the macro-format should be searched in.

An other usefull translated method is calendar($referenceTime = null, array $formats = []): string :

If you know momentjs, then it works the same way. You can pass a reference date as second argument, else now is used. And you can customize one or more formats using the second argument (formats to pass as array keys are: sameDay, nextDay, nextWeek, lastDay, lastWeek and sameElse):

Click here is an overview of the 281 locales (and 824 regional variants) supported by the last Carbon version:

Carbon — простой и функциональный инструмент PHP для работы с датой и временем

Вывод даты страницы или сообщения в блоге на русском языке — типовая задача практически любого сайта Рунета. Конечно, всегда есть возможность ограничиться отображением даты в формате типа 2020/03/24, но такое решение устроит далеко не всех. Тем более, что в Laravel задача отображения даты по-русски элегантно решается с помощью сторонней библиотеки jenssegers/date. В итоге, команда
<< Date::parse($post->created_at)->format(‘j F Y г.’) >> в blade-шаблоне выведет форматированную дату, типа «25 октября 2020 г.».

Библиотека Carbon

Библиотека Carbon — простое расширение встроенного в PHP класса DateTime и мощный инструмент для разнообразных манипуляций с датой и временем. Библиотека поддерживает методы для генерации даты из строки, прибавления и отнимания временных промежутков и вывода даты в произвольном формате. В Laravel поддержка библиотеки Carbon устроена таким образом, что по-умолчанию временные параметры моделей, типа created_at и updated_at, являются сущностями библиотеки. Это означает, что для отображения даты создания пользователя модели User достаточно применить один из методов библиотеки, например toFormattedDateString:

Вот еще несколько примеров использования библиотеки.

Библиотека jenssegers/date

Единственная загвоздка в применении библиотеки Carbon для русскоязычных сайтов — это поддержка русского языка. На текущий момент в Carbon русифицированы лишь отдельные методы. К счастью, для вывода даты на русском языке в Laravel можно воспользоваться дополнительной библиотекой jenssegers/date, разработанной энтузиастом Laravel и опытным веб-разработчиком Дженсом Сегерсом. Спрограммированное им расширение библиотеки Carbon как раз добавляет поддержку локализации и позволяет использовать на разных языках методы format, diffForHumans, parse, createFromFormat и timespan.

Алгоритм русификации

1. Установить библиотеку с помощью команды в консоли:

2. Установить для параметра locale в файле config/app.php значение «ru», т.е. русский язык

3. Добавить в метод boot в PHP-классе app\Providers\AppServiceProvider.php автозагрузку библиотеки jenssegers/date:

4. Использовать библиотеку jenssegers/date для вывода даты в blade-шаблоне:

Должно вывести что-то типа «25 октября 2020 г.».

Работа с датой и временем в PHP

Очевидно, что очень часто программистам приходится работать с датой и временем. Самый простой пример — это дата и время отправки сообщения на форуме. И, разумеется, такие вещи могут реализоваться на PHP, тем более, что возможностей по работе с датой и временем в PHP очень много.

Базовая функция, связанная с датой и временем в PHP, — это функция time(), которая возвращает количество секунд, прошедших с полуночи 01.01.1970 (зарождение эпохи Unix):

Запустив данный скрипт, Вы узнаете, сколько секунд прошло с полуночи 01.01.1970 до момента вызова функции time() в Вашем скрипте.

Разумеется, помимо этой базовой функции, которая присутствует во всех языках программирования, где можно работать с датой и временем (по крайней мере, среди тех, которые я знаю), существует и другая функция, которая называется getdate():

Запустив данный скрипт, Вы увидите набор ключей в массиве и их соответствующих значений (заодно, повторили конструкцию foreach). Думаю, что теперь для Вас не составит труда узнать любые данные, связанные с датой и временем. Например, чтобы вывести текущее время, необходимо написать следующий код:

Также у функции getdate() существует необязательный параметр, который означает количество секунд, прошедших с полуночи 01.01.1970. Он сделан для того, чтобы эта функция могла возвращать не только текущие время и дату, а, вообще говоря, любые:

В результате, Вы увидите 1974-ый год.

Также существует функция date(). Я рекомендую посмотреть описание по ней в справочнике, так как данная функция принимает весьма сложный параметр, который задаёт формат вывода даты. Элементов форматирования чуть больше 30-ти штук. И в примере ниже я приведу несколько из них, а остальные посмотрите в справочнике, потому что их запоминать не нужно, но ознакомиться с ними крайне желательно. А принцип их использования знать обязательно, и о нём следующий пример:

В результате, Вы увидите что-то наподобие этого: «Сегодня 15.11.2010 21:44:24«. Также у функции date() есть ещё второй необязательный параметр, задающий timestamp, как раз та величина, равная количеству секунд, прошедших с полуночи 01.01.1970. Пример использования второго параметра:

Также существует функция gmdate(), которая является полным аналогом функции date(), но функция gmdate() показывает время не по часовому поясу сервера, на котором работает скрипт, а по Гринвичу. Очевидно, что с помощью этой функции надо сохранять всю информацию о дате и времени, которую видит пользователь, а при выводе нужно подстраиваться под часовой пояс каждого пользователя (в идеале, конечно):

В результате, Вы увидите примерно следующее: «Mon Nov 15 18:52:45 GMT 2010«. Разумеется, у Вас будет выведена уже другая дата, но в аналогичном формате. Также я настоятельно рекомендую залезть в справочник и просто ознакомиться с другими элементами даты и времени в PHP (я привёл только треть), так как функции date() и gmdate() — это самый простой и самый быстрый способ получить дату и время в практически любом формате.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 7 ):

    Я всё понимаю, что с датой работать очень легко, но всё таки — напишите статью как сделать дату для каждого пользователя правильной, ни одной статьи про это нету, лазил 4 часа непрерываясь в поисках ответа на этот вопрос, 92 страницы в гугле обошёл и не нашёл, Пожалуйста напишите про это статью, так как у меня люди на сайте из разных стран, а время даже не моеё страны, совсем другой, которая на 6 часов больше моего времени. а я живу в Украине. напишите статью очень вас прошу

    Да, Михаил, меня тоже очень интересует этот вопрос! Хотелось бы статью! Спасибо!

    Хорошо, через 1-2 недели будет такая статья.

    Спасибо большое, жду с нетерпением!

    А можно адрес этой статьи (если она уже есть)?

    Здравствуйте ! А как вычитать минуты ? К примеру у меня есть две переменные в минутах: $start = 35; $now = date(«i»); Нужно вычесть из $now-$start чтобы получилось правильно а то не получается . (

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Добавить комментарий