سفارش تبلیغ
صبا ویژن
خداوند ـ عزّوجلّ ـ می فرماید : «ای محمّد! اگر آفریدگان به ساخته های شگفت من می نگریستند، جزمرا نمی پرستیدند و اگر شیرینی یاد مرا در دل هایشان می چشیدند، ملازم درگاه من می شدند و اگر به ظرائف نیکی های من می نگریستند، به چیزی جز من نمی پرداختند» . [رسول خدا صلی الله علیه و آله]
لوگوی وبلاگ
 

آمار و اطلاعات

بازدید امروز :8
بازدید دیروز :26
کل بازدید :842087
تعداد کل یاداشته ها : 1319
103/1/10
8:47 ص
مشخصات مدیروبلاگ
 
آذر آموزش[45]
باسلام من در شغل تدریس کامپیوتر هستم و دراکثر شاخه های کامپیوتر فعالیت دارم

خبر مایه
لوگوی دوستان
 

استفاده از تابع تبدیل تاریخ شمسی به میلادی و بالعکس در PHP (شماره123)


برای دریافت توابع کافیست که کد توابع را از این آدرس دریافت کنید :
http://www.iranphp.net/modules/sections/index.php?op=viewarticle&artid=19


بوسیله یک Copy و Paste متن این توابع را درون یک فایل جدید بنام به عنوان مثال
jalali.php
ذخیره کنید .

برای اینکه بتوانید از این توابع در برنامه خود استفاده کنید کافیست در ابتدای
برنامه خود دستور زیر را وارد کنید :



با این کار دو تابع با نامهای gregorian_to_jalali و jalali_to_gregorian در اختیار
شما قرار می گیرند که به ترتیب برای تبدیل تاریخ میلادی به شمسی و شمسی به میلادی
مورد استفاده قرار می گیرند .


برای اینکه بتوانم نحوه استفاده از این دو تابع را شرح دهم به ذکر مثالهایی در
این مورد می پردازم .


1-
تبدیل تاریخ میلادی به شمسی

برای این کار باید از تابع gregorian_to_jalali استفاده کنید . این تابع 3 متغیر
را از ورودی دریافت می کند که به ترتیب سال، ماه و روز می باشد که همگی از نوع
عددی می باشند .

برای مثال اگر بخواهیم تاریخ 2002-11-25 را که درون یک متغیر داریم به شمسی تبدیل
کنیم و سپس آنرا درون یک متغیر قرار دهیم ابتدا باید عناصر تاریخ میلادی رو جدا
کنیم . برای این کار می توانیم در دستور زیر استفاده کنیم :



list( $gyear, $gmonth, $gday ) = preg_split ( "/-/", $gdate );
?>



در اینجا از دستور preg_spilit برای جدا کردن عناصر تاریخ $gdate توسط جداکننده
استفاده کرده ایم . همانطور که می بینید syntax این دستور به این صورت است که
2
متغیر به عنوان ورودی دریافت می کند . اولی به عنوان delimiter می باشد که چون
می توان به صورت regex نیز آنرا وارد کرد باید بین دو slash (/) قرار گیرد و متغیر
دوم هم که همان متغییری است که تاریخ میلادی ما در آن قرار دارد .


چون خروجی این دستور یک آرایه است از دستور list استفاده کرده ایم تا عناصر آرایه
را هر کدام در یک متغیر قرار دهیم . هم اکنون روز، ماه و سال میلادی را هر کدام
در یک متغیر داریم . حال می توانیم از تابع gregorian_to_jalali استفاده کنیم :



list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($gyear, $gmonth, $gday);
?>


در اینجا مشخص است که 3 متغیر سال، ماه و روز میلادی را به عنوان متغیر های ورودی
تابع grogorian_to_jalali وارد کرده ایم و چون خروجی این تابع از نوع آرایه است
توسط دستور list هر کدام از عناصر این آرایه را در یک متغیر قرار می دهیم . این
متغیر های حاوی اطلاعات سال،‌ ماه و روز همان تاریخ به شمسی می باشند . برای اینکه
آنها را به صورت قابل نمایش در یک متغیر قرار دهیم می توانیم این خط را به برنامه
اضافه کنیم :




$jdate = $jyear."/".$jmonth."/".$jday;
?>

در صوتیکه مقدار $jdate را نمایش دهید همان تاریخ از نوع شمسی خواهد بود که چیزی
شبیه به مقدار زیر است :


4/9/1381

حال در صورتیکه بخواهید تاریخ همین لحظه را به صورت شمسی بدست آورید می توانید
از برنامه زیر استفاده کنید :



list($gyear, $gmonth, $gday ) = preg_split ("/-/", date("Y-m-d"));
list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($gyear, $gmonth, $gday);

$jdate = $jyear."/".$jmonth."/".$jday;
?>

همانطور که ملاحظه کردید از دستور date با آرگومان داده شده تاریخ فعلی سیستم
استخراج می شود و در همان روال توضیح داده شده تبدیل به شمسی شده و در متغیر $jdate
قرار می گیرد .


برای اینکه کارتان کمی ساده تر شود می توانید تابعی به شکل زیر تعریف کنید :



function get_jalali_date( $gdate="now" )
{

if ( $gdate == "now" )
{
list($gyear, $gmonth, $gday ) = preg_split ("/-/", date("Y-m-d"));
}
else
{
list( $gyear, $gmonth, $gday ) = preg_split ( "/-/", $gdate );
}
list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($gyear, $gmonth, $gday);
return $jyear."/".$jmonth."/".$jday;

}
?>



تابعی با نام get_jalali_date تعریف کردیم که یک متغیر به عنوان ورودی دریافت
می کند که این همان تاریخ به میلادی است . در صوتیکه هنگام صدا کردن این تابع تاریخ
میلادی را به عنوان ورودی برای این تابع وارد کرده باشید،‌ تابع همان تاریخ را
به شمسی تبدیل کرده و در خروجی بر می گرداند،‌ ولی اگر هیچ متغیری به عنوان ورودی
به این تابع ندهید،‌ تاریخ همان لحظه را به شمسی برای شما در خروجی بر می گرداند
.

مثلا برای تبدیل همان تاریخ 2002-11-25 به شمسی و قرار دادن آن در یک متغیر می
توانیم با استفاده از تابع بالا اینگونه عمل کنیم :





و یا برای بدست آوردن تاریخ همین لحظه و قرار دادن آن در یک متغیر اینگونه عمل
می کنیم :





همانطور که می بینید کار بسیار ساده تر شد.



2-
تبدیل تاریخ شمسی به میلادی :

با توضیحاتی مشابه می توانید از تابع jalali_to_gregorian استفاده کنید . مانند
تابع قبل این تابع هم سه متغیر به عنوان ورودی دریافت می کند که عبارتند از سال،
ماه و روز که همگی به شمسی هستند . سپس در جواب آرایه ای شامل سه قسمت که سال،‌
ماه و روز میلادی همان تاریخ هستند را بر می گرداند .



استفاده از تابع تبدیل تاریخ شمسی به میلادی و برعکس

برای نمونه اگر بخواهیم تاریخ 4/9/1381 را به میلادی تبدیل کنیم کاری مشابه برنامه
زیر انجام می دهیم :




$jdate="1381/9/4";
list( $jyear, $jmonth, $jday ) = preg_split ( "///", $jdate );
list( $gyear, $gmonth, $gday ) = jalali_to_gregorian($jyear, $jmonth, $jday);
$gdate = $gyear."-".$gmonth."-".$gday;
?>



تنها تفاومت موجود با تابع بالا استفاده از / برای جداسازی اجزاء تاریخ شمسی می
باشد . همانطور که گفتیم تابع preg_split آرگومان اول خود که همان delimiter (‌
جدا کننده )‌ می باشد را به صورت regex می گیرد که باید بین دو علامت / باشد ،‌
در اینجا باید قبل / که نشان دهنده کاراکتر delimiter ما می باشد یک \ (‌back slash
)‌
قرار می دهیم که جداکننده مشخص باشد .



توضیح خاص دیگری هم ندارد و همانند تابع تبدیل میلادی به شمسی اینجا هم می توانیم
تابعی با نام get_gregorian_date بسازیم که کار را راحتتر کند . ایجاد این تابع را به خواننده واگذار می کنم .


84/11/11::: 8:59 ص
نظر()