16 شهریور 1389 ساعت 10:49

English Arabic French German Italian Japanese Russian Spanish Persian

   
 

تبدیل تاریخ شمسی به میلادی  چاپ   ایمیل

برای دریافت توابع کافیست که کد توابع را از این آدرس دریافت کنید :
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 تعریف کردیم که یک متغیر به عنوان ورودی دریافت می کند که این همان تاریخ به میلادی است . در صوتیکه هنگام صدا کردن این تابع تاریخ میلادی را به عنوان ورودی برای این تابع وارد کرده باشید،‌ تابع همان تاریخ را به شمسی تبدیل کرده و در خروجی بر می گرداند،‌ ولی اگر هیچ متغیری به عنوان ورودی به این تابع ندهید،‌ تاریخ همان لحظه را به شمسی برای شما در خروجی بر می گرداند.

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
)‌
قرار می دهیم که جداکننده مشخص باشد .

نوشتن نظر
نام:
ايميل:
نظر:

كد:* Code


بيننده: 105

ارسال نظر
 
Copyright © 2009 Pezeshkanemrooz.com - Email: peyk@pezeshkanemrooz.com