X
تبلیغات
رایتل

http://www.iranphp.net

1

عنوان مقاله

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

نگارنده

: سید حمید رضا هاشمی گلپایگانی

hamid@morva.net

تاریخ نگارش

: آدرس پست الکترونیک: دوشنبه ۴ آذرماه ١٣٨١

http://www.iranphp.net

2

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

برای دریافت توابع کافیست که کد توابع را از این آدرس دریافت کنید

:

http://www.iranphp.net/modules/sections/index.php?op=viewarticle&artid=19

ذخیره کنید

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

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

<?

require_once

?>

php"jalali.php";

در اختیار شما قرار می گیرند که به ترتیب بر ای تبد یل

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

jalali_to_gregorian و gregorian_to_jalali با این کار دو تابع با نامهای.

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

.

١

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

استفاده کنید

که همگی از نوع عددی می باشند

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

٢٥

را که درون یک متغیر داریم به شمسی تبدیل کنیم و سپس آنرا درون یک متغیر قرار دهیم ابتدا باید عناصر تار یخ -١١- برای مثال اگر بخواهیم تاریخ ٢٠٠٢

میلادی رو جدا کنیم

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

<?

$gdate

php='2002-11-25';

list

?>

( $gyear, $gmonth, $gday ) = preg_split ( '/-/', $gdate );

syntax

می باشد که چون م ی توان به صورت

قرار گیرد و متغیر دوم هم که همان متغییری است که تاریخ میلادی ما در آن قرار دارد

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

استفاده کرده ایم تا عناصر آرایه را هر کدام در یک متغیر قرار دهیم

استفاده کنیم

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

<?

php

list

?>

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

وارد کرده ایم و چون خروجی

این تابع از نوع آرایه است

هر کدام از عناصر این آرایه را در یک متغیر قرار می دهیم

باشند

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

<?

$jdate

?>

php= $jyear."/".$jmonth."/".$jday;

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

: $jdate در صوتیکه مقدار

١٣٨١

/٩/٤

http://www.iranphp.net

3

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

:

<?

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 تابعی با نام

٢٥

به شمسی و قرار دادن آن در یک متغیر می توانیم با استفاده از تابع بالا اینگونه عمل کنیم -١١- مثلا برای تبدیل همان تاریخ ٢٠٠٢

<?

$jdate

?>

php= get_jalali_date("2002-11-25");

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

:

<?

$jdate

?>

php= get_jalali_date();

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

.

١

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

استفاده کنید

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

گرداند

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

١٣٨١ را به میلادی تبدیل کنیم کاری مشابه برنامه زیر انجام می دهیم

: /٩/ برای نمونه اگر بخواهیم تاریخ ٤

http://www.iranphp.net

4

<?

$jdate

php="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 تنها تفاومت موجود با تابع بالا استفاده از / برای جداسازی اجزاء تاریخ شمسی می باشد . همانطور که گفتیم تابع/ باشد ، regex جدا کننده ) می باشد را به صورت )delimiter

قرار می دهیم که جداکننده مشخص باشد

بساز یم که کار را

راحتتر کند

با آرزوی توفیقات الهی

. \ (back slash ) ما می باشد یک delimiter در اینجا باید قبل / که نشان دهنده کاراکترget_gregorian_date توضیح خاص دیگری هم ندارد و همانند تابع تبدیل میلادی به شمسی اینجا هم می توانیم تابعی با نام. ایجاد این تابع را به خواننده واگذار می کنم