مبدل شمسی تابع date
25 اسفند 1387 ساعت 02:57
پی اچ پی
مادایکس به خوبی فارسی و RTL شده (البته با زحمات افرادی از جمله آقای زارع) ولی یه چیز اساسی کم داشت و اون هم تاریخ شمسی به عنوان خروجی تاریخ بود و از اونجایی که من یه آدم فوق العاده به دردبخور و مفید برای جامعه، همشهریان، هموطنان نیکو و سایر انسانهای کره خاکی در طی همه دوره های تاریخی هستم، تصمیم به بالا زدن آستینها گرفتم و شروع به نوشتن اسکریپت مبدل تاریخ میلادی به شمسی کردم.
در این موقع بود حس خودکفاییم اومد وسط و دخالت بی جا کرد و من تصمیم گرفتم خودم منطق تبدیل رو کشف کنم و مبدل رو بنویسم.
بعد از کلی حساب کتاب و سرگیجه تونستم منطق رو پیدا کنم و برنامه رو بنویسم. خیلی خوشحال بودم و هی سوت سوت میکردم که متوجه شدم اسکریپت های عزیزم به باگهای مکرر مبتلا هستند و پیدا کردن همشون از حوصله من کاملا خارجه! خلاصه زدم تو گوش حس خودکفایی و رفتم سراغ اسکریپتهای آماده.
یه کلاس خیلی خوب تو سایت IranPHP پیدا کردم که نویسنده اش آقای حق پرست بود. این کلاس رو تغییر دادم و با استفاده از متدهای مبدلش، تابع ()date رو با تمام فرمتهای معتبرش، برای شمسی آماده کنم.
من این موفقیت رو مدیون شش و خرده ای میلیارد دوستدارم هستم ![]()
معرفی کلاس
| Properties (مشخصه ها) | |
|---|---|
| نام | توضیج |
| jformat$ | آرایه انجمنی حاوی کلیه کاراکترهای معتبر برای تابع date ولی با مقدار شمسی و فارسی |
| format$ | مانند jformat$ ولی برای تاریخ میلادی |
| Methods (متدها) | |||
|---|---|---|---|
| نام | توضیج | پارامترها | مقدار بازگشتی |
| jdate | شبیه ساز تابع ()date برای تاریخ شمسی |
|
فرمت ترجمه شده بصورت string |
| gregorian_to_jalali | مبدل تاریخ میلادی به شمسی |
|
آرایه سه عنصری حاوی به ترتیب سال، ماه و روز شمسی |
| jalali_to_gregorian | مبدل تاریخ شمسی به میلادی |
|
آرایه سه عنصری حاوی به ترتیب سال، ماه و روز میلادی |
| ReturnMonthName | مشخص کننده نام ماه شمسی | monname$ : عدد ماه مورد نظر (1 تا 12) | نام فارسی ماه بصورت string |
| div | متد توکار برای گرفتن براکت تقسیم دو عدد | a$ ، b$ : اعداد ورودی | عدد صحیح |
نمونه استفاده:
$cal = new Calendar;
echo $cal->jdate("H:i Y/m/d");
خروجی کد بالا مثلا اینه: 1387/12/24 03:35
علت اصلی اینکه این مبدل بصورت کلاس ایجاد شده و نه بصورت یک تابع، این بوده که مشخصه های format$ و jformat$ حاوی تمامی کاراکترهای معتبر تابع ()date هستند و از طریق کلاس امکان دسترسی به همه اونها بدون فراخوانی خود تابع ()date یا متد ()jdate هست.
کافیه یکبار متد jdate با هر فرمت ورودی فراخوانی بشه تا این مشخصه ها مقدار بگیرن. نمونه:
$cal = new Calendar;
echo $cal->jdate("H:i Y/m/d");
echo $cal->jformat['Z'];
echo $cal->format['U'];
| کاراکترهای معتبر | ||
|---|---|---|
| کاراکتر | توضیج | نمونه |
| d | روز از ماه بصورت دو رقمی | عددی بین 01 تا 31 |
| D | نام روز در هفته، فقط حرف اول | پ (=پنجشنبه) |
| j | روز از ماه. تک رقمی برای اعداد تک رقمی | عددی بین 1 تا 31 |
| l | نام روز در هفته | شنبه |
| N | شماره روز در هفته، از 1 تا 7 | 1 (=شنبه) |
| S | حاوی عبارت "ام" | 25ام |
| w | شماره روز در هفته، از 0 تا 6 | 0 (=شنبه) |
| z | روز در سال | عددی بین 0 تا 365 |
| W | تعداد هفته گذشته از سال | 23 (=23امین هفته سال) |
| F | نام کامل ماه | مهر |
| m | ماه از سال بصورت دورقمی | عددی بین 01 تا 12 |
| M * | نام ماه از سال. مشابه F | فروردین |
| n | ماه از سال بصورت. تک رقمی برای اعداد تک رقمی | عددی بین 1 تا 12 |
| t | تعداد روز در ماه | عددی بین 29 تا 31 |
| L | نشانگر سال کبیسه | 1 برای کبیسه و 0 برای غیرکبیسه |
| o | سال چهاررقمی | 1388 |
| Y | سال چهاررقمی | 1366 |
| y | سال دورقمی | 87 |
| a | اوقات روز (am و pm) | ب.ظ و ق.ظ |
| A | اوقات روز بصورت کامل (am و pm) | بعد از ظهر و قبل از ظهر |
| B | زمان اینترنتی | عددی بین 000 تا 999 |
| g | ساعت در روز. تک رقمی برای اعداد تک رقمی | عددی بین 1 تا 12 |
| G | ساعت در روز. تک رقمی برای اعداد تک رقمی | عددی بین 0 تا 23 |
| h | ساعت در روز بصورت دورقمی | عددی بین 01 تا 12 |
| H | ساعت در روز بصورت دورقمی | عددی بین 00 تا 23 |
| i | دقیقه در ساعت بصورت دورقمی | عددی بین 00 تا 59 |
| s | ثانیه در ساعت بصورت دورقمی | عددی بین 00 تا 59 |
| u | میکروثانیه | مثل 54321 |
| e | شناسه موقعیت زمانی (Timezone) | UTC |
| I | مشخص کننده روز و شب | 1 برای روز و 0 برای شب |
| O | اختلاف ساعت جهانی (GMT) | 0330+ (برای ایران) |
| P | اختلاف ساعت جهانی (GMT) | 03:30+ (برای ایران) |
| T | مخفف شناسه موقعیت زمانی (Timezone) | MDT |
| Z | اختلاف ساعت جهانی بر اساس ثانیه | 12600+ (برای ایران) |
| c | نمایش زمان کامل | Y-m-d h:i:s P |
| r | نمایش زمان کامل | l j F Y h:i:s O |
| U | برچسب زمان (Timestamp) | 123588545 |
* کاراکتر M در تابع اصلی، سه حرف اول ماه مانند Jan و Mar غیره رو برمی گردونه که چون همانندسازی این روش در فارسی رایج و جالب نیست، از نام کامل ماه استفاده شده.

Google Chrome
امیرحسینم. اسمم رو دوست دارم، خودم رو دوست دارم. تهران زندگی می کنم. دانشجوی رشته صنایع هستم شغل درست و حسابی ندارم. طراحی وب می کنم ولی همه اش واسه سرگرمی بوده. برنامه نویس PHP هستم. برنامه نویسی و وقت گذرونی با کامپیوتر تنها کاریه که خسته ام نمی کنه.
تو چی فکر می کنی؟