شاید خیلی ها ندوند (منم تا امروز نمی دونستم!) ولی PHP از ورژن ۵٫۳ به بعد با استفاده از ICU از تقویم فارسی پشتیبانی می کند.

اول باید ببنید که extension مربوط به internationalization فعال هست یا نه برای این کار این دسور را اجرا کنید.

get_loaded_extensions();

لیست تمام extension ها را به صورت یک آرایه بر می گرداند؛ intl مربوط به extension مورد نظر ماست!

اگر intl نبود، باید فایل php.ini را ادیت کنید و کامنت این خط را بر دارید.

extension=php_intl.dll

اگر از XAMPP استفاده می کنید دقت کنید که آدرس فولدر PHP موجود در XAMPP را در PATH سیستم قرار دهید.

سرور را ریستارت کرده؛ بعد از فعال سازی این extension حال می توانید از کلاس IntlDateFormatter استفاده کنید.

به عنوان مثال این تکه کد

$date_format='EEEE، d MMMM Y';

$fmt = new IntlDateFormatter("fa_IR@calendar=persian", IntlDateFormatter::FULL, IntlDateFormatter::FULL,

"Asia/Tehran", IntlDateFormatter::TRADITIONAL,$date_format);

echo $fmt->format(intval(time()));

تاریخ امروز ره به این صورت نمایش می دهد.

سه‌شنبه، ۱۲ شهریور ۱۳۹۲

برای اطلاع از فرمت تاریخ ICU می توانید به این لینک مراجعه کنید.

اعداد فارسی

با استفاده از کلاس NumberFormatter که از همان intl استفاده می کند، می توانید این کار را انجام دهید؛ تکه کده زیر عداد ۱۳۳۷ را با اعداد فارسی چاپ می کند.

$persianNumberFormatter=new NumberFormatter("fa_IR",NumberFormatter::IGNORE);
echo $persianNumberFormatter->format(1337);

یک از مقادیر جالبی که آرگمان style$ می گیرد، NumberFormatter::SPELLOUT هست. اگر آرگمان دوم را در کد بالا با این عوض کنید.

خروجی عبارت زیر را می گیرید.

یک هزار و سیصد و سی و هفت دیگه چی از این بهتر؟!