<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: hamed pakdaman</title>
    <description>The latest articles on DEV Community by hamed pakdaman (@hamed_pakdaman_c724e294d9).</description>
    <link>https://dev.to/hamed_pakdaman_c724e294d9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3772748%2F1d41b2d0-29ca-4f1d-8441-f45dcd077713.jpg</url>
      <title>DEV Community: hamed pakdaman</title>
      <link>https://dev.to/hamed_pakdaman_c724e294d9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hamed_pakdaman_c724e294d9"/>
    <language>en</language>
    <item>
      <title>What frustrates you most about your current CMS?</title>
      <dc:creator>hamed pakdaman</dc:creator>
      <pubDate>Tue, 21 Apr 2026 06:55:28 +0000</pubDate>
      <link>https://dev.to/hamed_pakdaman_c724e294d9/what-frustrates-you-most-about-your-current-cms-3jmk</link>
      <guid>https://dev.to/hamed_pakdaman_c724e294d9/what-frustrates-you-most-about-your-current-cms-3jmk</guid>
      <description>&lt;p&gt;Hey developers! 👋&lt;br&gt;
I'm working on improving a Laravel-based CMS and want to understand what actually matters to developers when choosing/using a CMS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick question
&lt;/h2&gt;

&lt;p&gt;What's your biggest frustration with your current CMS (WordPress, Strapi, Contentful, etc.)?&lt;br&gt;
Is it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance/bloat?&lt;/li&gt;
&lt;li&gt;Poor developer experience?&lt;/li&gt;
&lt;li&gt;Expensive pricing?&lt;/li&gt;
&lt;li&gt;Difficult customization?&lt;/li&gt;
&lt;li&gt;Security concerns?&lt;/li&gt;
&lt;li&gt;Something else entirely?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus:&lt;/strong&gt; What CMS are you currently using and why haven't you switched?&lt;/p&gt;




&lt;p&gt;Not trying to sell anything—genuinely trying to understand what sucks and what doesn't. Your honest feedback helps build better tools for all of us 🙏&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>MultiCarbon: Native Jalali &amp; Hijri Calendar Support for PHP Carbon</title>
      <dc:creator>hamed pakdaman</dc:creator>
      <pubDate>Sat, 14 Feb 2026 14:38:53 +0000</pubDate>
      <link>https://dev.to/hamed_pakdaman_c724e294d9/multicarbon-native-jalali-hijri-calendar-support-for-php-carbon-38fl</link>
      <guid>https://dev.to/hamed_pakdaman_c724e294d9/multicarbon-native-jalali-hijri-calendar-support-for-php-carbon-38fl</guid>
      <description>&lt;p&gt;If you've ever worked on a project targeting users in Iran, Afghanistan, or Arabic-speaking countries, you know the pain of converting dates between Jalali (Solar Hijri), Hijri&lt;br&gt;
  (Islamic Lunar), and Gregorian calendars.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;MultiCarbon&lt;/strong&gt; to solve this once and for all — not as a wrapper, but as a direct extension of &lt;code&gt;nesbot/carbon&lt;/code&gt;. Every Carbon method you already know works seamlessly in any&lt;br&gt;
  calendar mode.&lt;/p&gt;

&lt;p&gt;## Install&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  composer require hpakdaman/multicarbon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Requires PHP 8.1+ and Carbon 3.&lt;/p&gt;




&lt;p&gt;The Basics — One Timestamp, Three Calendars&lt;/p&gt;

&lt;p&gt;The core idea is simple: the underlying timestamp never changes. You just switch the presentation layer.&lt;/p&gt;

&lt;p&gt;use MultiCarbon\MultiCarbon;&lt;/p&gt;

&lt;p&gt;$date = new MultiCarbon('2025-03-21');&lt;/p&gt;

&lt;p&gt;echo $date-&amp;gt;jalali()-&amp;gt;format('l j F Y');&lt;br&gt;
  // جمعه 1 فروردین 1404&lt;/p&gt;

&lt;p&gt;echo $date-&amp;gt;hijri()-&amp;gt;format('l j F Y');&lt;br&gt;
  // الجمعة 21 رمضان 1446&lt;/p&gt;

&lt;p&gt;echo $date-&amp;gt;gregorian()-&amp;gt;format('l j F Y');&lt;br&gt;
  // Friday 21 March 2025&lt;/p&gt;

&lt;p&gt;That's it. Same object, three calendars, fully fluent.&lt;/p&gt;




&lt;p&gt;Create Dates Directly in Any Calendar&lt;/p&gt;

&lt;p&gt;No need to mentally convert. Just think in the calendar you need:&lt;/p&gt;

&lt;p&gt;// Nowruz (Persian New Year)&lt;br&gt;
  $nowruz = MultiCarbon::createJalali(1404, 1, 1);&lt;br&gt;
  echo $nowruz-&amp;gt;gregorian()-&amp;gt;format('Y-m-d'); // 2025-03-21&lt;/p&gt;

&lt;p&gt;// First day of Ramadan&lt;br&gt;
  $ramadan = MultiCarbon::createHijri(1446, 9, 1);&lt;br&gt;
  echo $ramadan-&amp;gt;gregorian()-&amp;gt;format('Y-m-d'); // 2025-03-01&lt;/p&gt;




&lt;p&gt;Calendar-Aware Arithmetic&lt;/p&gt;

&lt;p&gt;This is where it gets interesting. Adding a month in Jalali isn't the same as adding a month in Gregorian — month lengths differ. MultiCarbon handles this automatically:&lt;/p&gt;

&lt;p&gt;// Shahrivar has 31 days, Mehr has 30&lt;br&gt;
  $date = MultiCarbon::createJalali(1404, 6, 31);&lt;br&gt;
  $date-&amp;gt;addMonth();&lt;br&gt;
  echo $date-&amp;gt;format('Y/m/d'); // 1404/07/30 — clamped to Mehr's max&lt;/p&gt;

&lt;p&gt;// Leap year handling&lt;br&gt;
  $date = MultiCarbon::createJalali(1403, 12, 30); // Esfand 30 (1403 is leap)&lt;br&gt;
  $date-&amp;gt;addYear();&lt;br&gt;
  echo $date-&amp;gt;format('Y/m/d'); // 1404/12/29 — clamped (1404 is not leap)&lt;/p&gt;




&lt;p&gt;Localized Names — Persian &amp;amp; Arabic&lt;/p&gt;

&lt;p&gt;Month names, weekday names, and even AM/PM are fully localized:&lt;/p&gt;

&lt;p&gt;$date = MultiCarbon::createJalali(1404, 3, 15);&lt;/p&gt;

&lt;p&gt;echo $date-&amp;gt;jalali()-&amp;gt;monthName;    // خرداد&lt;br&gt;
  echo $date-&amp;gt;jalali()-&amp;gt;dayName;      // پنجشنبه&lt;/p&gt;

&lt;p&gt;echo $date-&amp;gt;hijri()-&amp;gt;monthName;     // ذیحجه&lt;br&gt;
  echo $date-&amp;gt;hijri()-&amp;gt;dayName;       // الخمیس&lt;/p&gt;




&lt;p&gt;Farsi, Arabic &amp;amp; Latin Digits&lt;/p&gt;

&lt;p&gt;Switch the digit system globally with one line:&lt;/p&gt;

&lt;p&gt;MultiCarbon::setDigitsType(MultiCarbon::DIGITS_FARSI);&lt;br&gt;
  echo MultiCarbon::createJalali(1404, 1, 1)-&amp;gt;format('Y/m/d');&lt;br&gt;
  // ۱۴۰۴/۰۱/۰۱&lt;/p&gt;

&lt;p&gt;MultiCarbon::setDigitsType(MultiCarbon::DIGITS_ARABIC);&lt;br&gt;
  echo MultiCarbon::createHijri(1446, 9, 1)-&amp;gt;format('Y/m/d');&lt;br&gt;
  // ١٤٤٦/٠٩/٠١&lt;/p&gt;

&lt;p&gt;MultiCarbon::setDigitsType(MultiCarbon::DIGITS_LATIN); // reset&lt;/p&gt;




&lt;p&gt;diffForHumans() in Persian &amp;amp; Arabic&lt;/p&gt;

&lt;p&gt;echo MultiCarbon::createJalali(1403, 1, 1)-&amp;gt;diffForHumans();&lt;br&gt;
  // 1 سال پیش&lt;/p&gt;

&lt;p&gt;echo MultiCarbon::createHijri(1445, 1, 1)-&amp;gt;diffForHumans();&lt;br&gt;
  // منذ 1 سنة&lt;/p&gt;




&lt;p&gt;Calendar-Aware Boundaries&lt;/p&gt;

&lt;p&gt;Start/end of month and year respect the active calendar:&lt;/p&gt;

&lt;p&gt;$date = MultiCarbon::createJalali(1404, 6, 15, 14, 30, 0);&lt;/p&gt;

&lt;p&gt;echo $date-&amp;gt;copy()-&amp;gt;startOfMonth()-&amp;gt;format('Y/m/d H:i:s');&lt;br&gt;
  // 1404/06/01 00:00:00&lt;/p&gt;

&lt;p&gt;echo $date-&amp;gt;copy()-&amp;gt;endOfMonth()-&amp;gt;format('Y/m/d H:i:s');&lt;br&gt;
  // 1404/06/31 23:59:59&lt;/p&gt;

&lt;p&gt;echo $date-&amp;gt;copy()-&amp;gt;endOfYear()-&amp;gt;format('Y/m/d H:i:s');&lt;br&gt;
  // 1404/12/29 23:59:59 (not leap)&lt;/p&gt;




&lt;p&gt;Leap Year Detection&lt;/p&gt;

&lt;p&gt;MultiCarbon::createJalali(1403, 1, 1)-&amp;gt;isLeapYear(); // true&lt;br&gt;
  MultiCarbon::createJalali(1404, 1, 1)-&amp;gt;isLeapYear(); // false&lt;/p&gt;




&lt;p&gt;Comparisons &amp;amp; Diff&lt;/p&gt;

&lt;p&gt;All comparison methods work in the active calendar:&lt;/p&gt;

&lt;p&gt;$a = MultiCarbon::createJalali(1404, 1, 1);&lt;br&gt;
  $b = MultiCarbon::createJalali(1404, 1, 25);&lt;/p&gt;

&lt;p&gt;$a-&amp;gt;isSameMonth($b);  // true&lt;br&gt;
  $a-&amp;gt;isSameDay($b);    // false&lt;br&gt;
  $a-&amp;gt;lessThan($b);     // true&lt;br&gt;
  $a-&amp;gt;diffInDays($b);   // 24&lt;/p&gt;




&lt;p&gt;Convert from Carbon&lt;/p&gt;

&lt;p&gt;Already using Carbon in your project? Convert seamlessly:&lt;/p&gt;

&lt;p&gt;$carbon = \Carbon\Carbon::parse('2025-03-21');&lt;br&gt;
  $mc = MultiCarbon::fromCarbon($carbon);&lt;/p&gt;

&lt;p&gt;echo $mc-&amp;gt;jalali()-&amp;gt;format('Y/m/d');  // 1404/01/01&lt;br&gt;
  echo $mc-&amp;gt;hijri()-&amp;gt;format('Y/m/d');   // 1446/09/21&lt;/p&gt;




&lt;p&gt;Calendar Properties&lt;/p&gt;

&lt;p&gt;Access all date components in the active calendar:&lt;/p&gt;

&lt;p&gt;$date = MultiCarbon::createJalali(1404, 6, 15);&lt;/p&gt;

&lt;p&gt;$date-&amp;gt;year;        // 1404&lt;br&gt;
  $date-&amp;gt;month;       // 6&lt;br&gt;
  $date-&amp;gt;day;         // 15&lt;br&gt;
  $date-&amp;gt;dayOfYear;   // 170&lt;br&gt;
  $date-&amp;gt;daysInMonth; // 31&lt;br&gt;
  $date-&amp;gt;quarter;     // 2&lt;br&gt;
  $date-&amp;gt;weekOfYear;  // 36&lt;br&gt;
  $date-&amp;gt;isWeekend(); // false (Iranian week: Fri is weekend)&lt;/p&gt;




&lt;p&gt;Serialization&lt;/p&gt;

&lt;p&gt;$date = MultiCarbon::createJalali(1404, 7, 10, 8, 30, 0);&lt;/p&gt;

&lt;p&gt;$date-&amp;gt;toDateString();  // "1404-07-10"&lt;br&gt;
  $date-&amp;gt;toArray();&lt;br&gt;
  // ['year' =&amp;gt; 1404, 'month' =&amp;gt; 7, 'day' =&amp;gt; 10, 'hour' =&amp;gt; 8, 'minute' =&amp;gt; 30, 'second' =&amp;gt; 0]&lt;/p&gt;

&lt;p&gt;echo $date; // "1404/07/10 08:30:00"&lt;/p&gt;




&lt;p&gt;Laravel Integration&lt;/p&gt;

&lt;p&gt;MultiCarbon ships with a Laravel service provider, facade, and Blade directives out of the box:&lt;/p&gt;

&lt;p&gt;// Global helpers&lt;br&gt;
  jdate('Y/m/d H:i:s');                         // Current Jalali date&lt;br&gt;
  hdate('Y/m/d');                                // Current Hijri date&lt;/p&gt;

&lt;p&gt;// Blade directives&lt;br&gt;
  &lt;a class="mentioned-user" href="https://dev.to/jdate"&gt;@jdate&lt;/a&gt;('Y/m/d H:i:s')                         // Current Jalali&lt;br&gt;
  @hdate('Y/m/d')                                // Current Hijri&lt;br&gt;
  @jalali($user-&amp;gt;created_at, 'Y/m/d')           // Convert to Jalali&lt;br&gt;
  @hijri($post-&amp;gt;published_at, 'Y/m/d')          // Convert to Hijri&lt;/p&gt;




&lt;p&gt;How It Works Under the Hood&lt;/p&gt;

&lt;p&gt;MultiCarbon uses debug_backtrace() to detect whether a property or method is accessed by your code or by Carbon's internal engine. This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you call $date-&amp;gt;year → returns the Jalali/Hijri year&lt;/li&gt;
&lt;li&gt;When Carbon internally calls $this-&amp;gt;year → returns Gregorian so parent logic doesn't break&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/hpakdaman/multicarbon" rel="noopener noreferrer"&gt;https://github.com/hpakdaman/multicarbon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Packagist: &lt;a href="https://packagist.org/packages/hpakdaman/multicarbon" rel="noopener noreferrer"&gt;https://packagist.org/packages/hpakdaman/multicarbon&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;I'd love to hear your feedback, suggestions, or feature requests. Feel free to open an issue or drop a comment below!&lt;/p&gt;

</description>
      <category>carbon</category>
      <category>multicarbon</category>
      <category>jalali</category>
      <category>laravel</category>
    </item>
  </channel>
</rss>
