استفاده
از تابع تبدیل تاریخ شمسی به میلادی و برعکس
برای دریافت
توابع کافیست که کد توابع را از این آدرس دریافت کنید :
http://www.iranphp.net/modules/sections/index.php?op=viewarticle&artid=19
بوسیله یک Copy و Paste متن این توابع را درون یک فایل جدید بنام به
عنوان مثال jalali.php ذخیره کنید .
برای اینکه
بتوانید از این توابع در برنامه خود استفاده کنید کافیست
در ابتدای برنامه خود دستور زیر را وارد کنید :
<?php require_once "jalali.php\";?>
با این کار دو
تابع با نامهای gregorian_to_jalali و jalali_to_gregorian در اختیار شما قرار می گیرند
که به ترتیب برای تبدیل تاریخ میلادی به شمسی
و شمسی به میلادی
مورد استفاده قرار می گیرند .
برای اینکه
بتوانم نحوه استفاده از این دو تابع را شرح دهم به ذکر مثالهایی
در این مورد می پردازم .
1- تبدیل تاریخ
میلادی به شمسی
برای این
کار باید از تابع gregorian_to_jalali استفاده کنید . این تابع 3 متغیر
را از ورودی دریافت می کند که به ترتیب سال، ماه و روز می
باشد که همگی از نوع
عددی می باشند .
برای مثال اگر
بخواهیم تاریخ 2002-11-25 را که درون یک متغیر داریم
به شمسی تبدیل کنیم و سپس آنرا درون یک متغیر قرار
دهیم ابتدا باید عناصر تاریخ میلادی رو جدا
کنیم . برای این کار می توانیم در دستور زیر
استفاده کنیم :
<?php $gdate='2002-11-25';
list( $gyear, $gmonth, $gday ) = preg_split ( '/-/', $gdate
);
?>
در اینجا
از دستور preg_spilit برای جدا کردن عناصر تاریخ $gdate
توسط جداکننده
– استفاده کرده ایم
. همانطور که می بینید syntax این دستور به این صورت است که
2 متغیر به عنوان ورودی دریافت می کند . اولی به
عنوان delimiter می
باشد که چون می توان به صورت regex نیز آنرا وارد کرد باید بین
دو slash (/) قرار
گیرد و متغیر
دوم هم که همان متغییری است که تاریخ میلادی
ما در آن قرار دارد .
چون خروجی این
دستور یک آرایه است از دستور list استفاده کرده ایم تا عناصر آرایه را هر کدام در یک
متغیر قرار دهیم . هم اکنون روز، ماه و سال میلادی را هر
کدام
در یک متغیر داریم . حال می توانیم از تابع gregorian_to_jalali استفاده کنیم :
<?php
list( $jyear, $jmonth, $jday
) = gregorian_to_jalali($gyear, $gmonth, $gday);
?>
در اینجا مشخص است
که 3 متغیر سال، ماه و روز میلادی را به عنوان متغیر های
ورودی تابع grogorian_to_jalali وارد کرده ایم و چون خروجی این تابع از نوع آرایه
است
توسط دستور list هر
کدام از عناصر این آرایه را در یک متغیر قرار می دهیم
. این متغیر های حاوی اطلاعات سال، ماه و روز همان تاریخ
به شمسی می باشند . برای اینکه
آنها را به صورت قابل نمایش در یک متغیر قرار دهیم می
توانیم این خط را به برنامه اضافه کنیم :
<?php
$jdate = $jyear."/\".$jmonth.\"/\".$jday;
?>
در صوتیکه مقدار $jdate را
نمایش دهید همان تاریخ از نوع شمسی خواهد بود که چیزی
شبیه به مقدار زیر است :
4/9/1381
حال در صورتیکه
بخواهید تاریخ همین لحظه را به صورت شمسی بدست آورید
می توانید از برنامه زیر استفاده کنید :
<?php
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
قرار می گیرد .
برای اینکه
کارتان کمی ساده تر شود می توانید تابعی به شکل زیر
تعریف کنید :
<?php
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 به شمسی و قرار دادن آن در یک متغیر
می توانیم با استفاده از تابع بالا اینگونه عمل کنیم :
<?php $jdate
= get_jalali_date("2002-11-25\");?>
و یا برای
بدست آوردن تاریخ همین لحظه و قرار دادن آن در یک متغیر اینگونه
عمل می کنیم :
<?php $jdate
= get_jalali_date();?>
همانطور که می بینید
کار بسیار ساده تر شد.
2- تبدیل تاریخ
شمسی به میلادی :
با توضیحاتی
مشابه می توانید از تابع jalali_to_gregorian استفاده کنید . مانند تابع قبل این
تابع هم سه متغیر به عنوان ورودی دریافت می کند که
عبارتند از سال،
ماه و روز که همگی به شمسی هستند . سپس در جواب آرایه ای
شامل سه قسمت که سال، ماه و روز میلادی همان تاریخ هستند را بر
می گرداند .
برای نمونه اگر
بخواهیم تاریخ 4/9/1381 را به میلادی تبدیل کنیم
کاری مشابه برنامه زیر انجام می دهیم :
<?php
$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 بسازیم که کار را راحتتر کند . ایجاد
این تابع
را به خواننده واگذار می کنم .
بازگشت به فهرست
بازگشت به صفحه نخست