Как вы знаете, Laravel использует мощный пакет Carbon для обработки даты и времени по умолчанию и автоматически конвертирует атрибуты даты модели в экземпляр Carbon. Это делает программиста относительно свободным в работе с атрибутами даты в моделях Laravel и позволяет ему / ей использовать десятки методов, предоставляемых углеродом.

Но эта простота использования остается только до тех пор, пока вы хотите использовать разницу во времени, время в прямом и обратном направлении или дату по григорианскому календарю, а когда дело доходит до даты Джалали, Carbon больше не выполнял никаких работ. Хотя Carbon имеет возможность локализации, и вы можете указать ему fa_IR в качестве параметра локали, но это только переводит текстовые выходные данные Carbon на персидский язык, а тип даты остается григорианским.

Теперь, с этими описаниями, как можно использовать дату Джалали в Laravel? Очевидно, на этот вопрос нет однозначного ответа, и каждый программист найдет способ сделать это в соответствии с условиями своего проекта. Некоторые рекомендуют использовать пакет Morilog / jalali, некоторые до сих пор используют библиотеку jdf.php (либо в качестве вспомогательной функции, либо путем преобразования ее в класс), а в последнее время многие используют пакет Verta и, конечно, десятки решений, которые каждый может использовать или не использовать по своему выбору.

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

Я предлагаю расширить Carbon, чтобы добавить в него поддержку календаря Jalali, вместо того, чтобы отказываться от него. Как вы знаете, у углерода есть метод, называемый макросом, который, как и другие методы макроса, может добавлять в класс собственные методы и атрибуты. С другой стороны, у нас есть библиотека jdf.php, которая является одним из самых простых инструментов для работы с датой Jalali в мире php, и если вы раньше с ней не работали, вы можете прочитать все ее документы в менее 10 минут. Так что, если мы объединим два:

Мы просто добавили два метода, jdate и jmktime, в Carbon. первый для вывода даты Jalali и второй для создания экземпляра даты Jalali из углерода, также мы сохранили Carbon и его возможности.

Теперь нам просто нужно убедиться, что код выполняется в начале программы, чтобы эти методы можно было использовать повсюду в проекте. Для этого вы можете поместить код в метод загрузки AppServiceProvider или даже, чтобы очистить работу, создать новую службу поставщика под названием CarbonServiceProvider и поместить код в ее метод загрузки:

Очевидно, я назвал новые методы jdate и jmktime и изменил порядок входных аргументов, вы можете указать любое имя, которое хотите (например, formatJalali и createJalali), и любой порядок аргументов, который вы хотите. Очевидно, что, используя метод макроса Carbon, вы можете добавить столько пользовательских методов и атрибутов, сколько хотите, в Carbon, и, конечно же, вы можете использовать другие инструменты, такие как сама Verta, внутри макроса для преобразования даты вместо jdf.php, который я использовал .

ر ر