در این جلسه از سری آموزشی پیاچپی قصد داریم در مورد تاریخ و ساعت صحبت کنیم. مطمئنا مواقع زیادی پیش میآید که نیاز به درج ساعت و تاریخ در پیاچپی خواهید داشت و یادگیری توابع مرتبط و نحوه استفاده از آنها بسیار مهم است. در ادامه با ما همراه باشید.
تاریخ همیشه بخش مهمی از زندگی روزمره را تشکیل میدهد و باعث میشود بتوانیم به انجام همه کارهای خود برسیم. توابع مربوط به ساعت و تاریخ در پیاچپی بسیار مهم هستند. نیاز به نمایش تاریخ و ساعت هم در مواقع ثبت اطلاعات و هم در مواقع نمایش دادن اطلاعات وجود دارد. پیاچپی ابزارهای بسیار قدرتمندی را به منظور استفاده از تاریخ و ساعت در اختیار توسعهدهندگان میگذارد.
دریافت زمان با ()time
تابع ()time تمام اطلاعات لازم برای لحظه حاضر از تاریخ و ساعت را در اختیار شما قرار خواهد داد. این تابع نیاز به هیچ آرگومان ورودی ندارد اما یک رشته متنی را به خروجی میدهد.
رشته متنی که از این تابع برگردانده میشود تعداد ثانیههای سپری شده از نیمهشب ۱ ژانویه ۱۹۷۰ را به وقت GMT نشان میدهد. زمان حاضر به شکل UNIX نمایش مییابد که این یعنی تعداد ثانیههای گذشته شده از یک زمان مرجع.
برای نمایش خروجی این تابع ابتدا نرمافزار Xampp را اجرا کرده و سرورهای آپاچی و MySQL را فعال کنید. حال در پوشه htdocs یک پوشه به اسم time بسازید. در این پوشه فایلی به نام test.php ساخته و کد زیر را در آن قرار دهید.
<?php
echo time();
?>
اجرای کد فوق از طریق آدرس http://127.0.0.1/time/index.php باعث ایجاد نتیجهای مثل عدد ۱۴۶۶۶۶۹۴۱۶ خواهد شد.
فهمیدن این عدد قطعا کار آسانی نیست. اما PHP ابزارهای بسیار خوبی را برای تبدیل این عدد به فرمتهای قابل فهم و معمول تاریخ و زمان ارائه میدهد.
تابع ()getdate
تابع ()getdate میتواند timstamp (خروجی که از تابع ()time به دست میآید) را به طور اختیاری به عنوان ورودی دریافت کند. خروجی این تابع یک آرایه از اطلاعات مربوط به تاریخ است. اگر شما ورودی این تابع را تعیین نکنید از میزان خروجی کنونی ()time استفاده میکند.
در جدول زیر میتوانید لیست المانهای آرایهای که از تابع getdate بهدست میآید را مشاهده کنید.
شماره | کلید و توضیح | مثال |
---|---|---|
۱ | seconds: تعداد ثانیههای گذشته از دقیقه کنونی (۰-۵۹) | ۲۰ |
۲ | minutes: تعداد دقایق گذشته از ساعت کنونی (۰ – ۵۹) | ۲۹ |
۳ | hours: تعداد ساعتهای گذشته از روز کنونی (۰ – ۲۳) | ۲۲ |
۴ | mday: روز ماه کنونی (۱ – ۳۱) | ۱۱ |
۵ | wday: روز هفته کنونی (۰ – ۶) | ۴ |
۶ | mon: ماه سال کنونی (۱ – ۱۲) | ۷ |
۷ | year: سال (۴ رقمی) | ۱۹۹۷ |
۸ | yday: روز کنونی در سال جاری ( ۰ – ۳۶۵ ) | ۱۹ |
۹ | weekday: روز جاری در هفته کنونی | Thursday |
۱۰ | month: ماه جاری در سال کنونی | January |
۱۱ | ۰: Timestamp – تایماستامپ | ۹۴۸۳۷۰۰۴۸ |
حال شما میتوانید با استفاده از دادههای فوق کنترل کاملی را بر روی تاریخ و ساعت داشته باشید. شما میتوانید براساس فرمت موردنیاز خود از دادههای بالا استفاده کنید.
به مثال زیر دقت کنید:
<?php
$date_array = getdate();
foreach ( $date_array as $key => $val ){
print “$key = $val<br />”;
}
$formated_date = “Today’s date: “;
$formated_date .= $date_array[‘mday’] . “/”;
$formated_date .= $date_array[‘mon’] . “/”;
$formated_date .= $date_array[‘year’];
print $formated_date;
?>
نتیجه اجرای کد فوق چیزی شبیه به زیر است:
seconds = 18
minutes = 10
hours = 8
mday = 25
wday = 4
mon = 6
year = 2016
yday = 174
weekday = Thursday
month = June
۰ = ۱۴۶۶۶۶۹۴۱۸
Today’s date: 25/6/2016
تبدیل تایماستامپ با تابع ()date
تابع ()date شکل فرمتبندی شدهای از تاریخ و زمان را نشان میدهد. شما میتوانید تعداد بسیار زیادی فرمت بر حسب خلاقیت یا نیاز خود با این تابع بهدست آورید. کد استاندارد این تابع به شکل زیر است:
date(format,timestamp)
تابع ()date نیز میتواند تایماستامپ (timestamp) موردنظرتان را به صورت اختیاری به عنوان ورودی دریافت کند و اگر این ورودی تعیین نشود، از زمان کنونی استفاده خواهد شد. در جدول زیر لیستی از فرمتهایی که میتوانید با این تابع استفاده کنید آورده شده است.
شماره | فرمت و توضیح | مثال |
---|---|---|
۱ | a: واژه ‘am’ یا ‘pm’ با حروف کوچک | pm |
۲ | A: واژه ‘AM’ یا ‘PM’ با حروف بزرگ | PM |
۳ | d: روز جاری در ماه کنونی | ۲۰ |
۴ | D: روز هفته جاری (سه کاراکتر) | Thu |
۵ | F: نام ماه جاری | January |
۶ | h: ساعت (فرمت ۱۲ ساعته – اعداد تک رقمی با یک صفر پیش از عدد) | ۱۲ |
۷ | H: ساعت (فرمت ۲۴ ساعته – اعداد تک رقمی با یک صفر پیش از عدد) | ۲۲ |
۸ | g: ساعت (فرمت ۱۲ ساعته – اعداد تک رقمی بدون یک صفر پیش از عدد) | ۱۲ |
۹ | G: ساعت (فرمت ۲۴ ساعته – اعداد تک رقمی بدون یک صفر پیش از عدد) | ۲۲ |
۱۰ | i: دقیقه ( ۰ – ۵۹ ) | ۲۳ |
۱۱ | j: روز ماه جاری (اعداد تک رقمی بدون یک صفر پیش از عدد) | ۲۰ |
۱۲ | l (حرف کوچک ‘L’): روز هفته | Thursday |
۱۳ | L: کبیسه بودن سال (‘۱’ بله, ‘۰’ خیر) | ۱ |
۱۴ | m: ماه جاری سال کنونی (عدد – اعداد تک رقمی با یک صفر پیش از عدد) | ۱ |
۱۵ | M: ماه جاری سال کنونی (سه کاراکتر) | Jan |
۱۶ | r: فرمت RFC 2822 | Thu, 21 Dec 2000 16:01:07 +0200 |
۱۷ | n: ماه جاری سال کنونی (عدد – اعداد تک رقمی بدون یک صفر پیش از عدد) | ۲ |
۱۸ | s: ثانیههای گذشته شده از دقیقه جاری | ۲۰ |
۱۹ | U: تایماستامپ | ۹۴۸۳۷۲۴۴۴ |
۲۰ | y: سال (دو رقم) | ۰۶ |
۲۱ | Y: سال (چهار رقم) | ۲۰۰۶ |
۲۲ | z: روز کنونی سال جاری (۰ – ۳۶۵) | ۲۰۶ |
۲۳ | Z: افست ثانیهها از GMT | +۵ |
به عنوان مثال کد زیر را در یک فایل وارد کرده و آن را اجرا کنید:
<?php
print date(“m/d/y G.i:s<br>”, time());
print “Today is “;
print date(“j of F Y, \a\\t g.i a”, time());
?>
خروجی کد بالا به شکل زیر خواهد بود:
۰۶/۲۵/۱۶ ۸٫۱۰:۱۷<bthu, 25=”” jun=”” 2016=”” 08:10:17=”” +0000=””>Today is 25 2016f June 2016, at 8.10 am
اما تمام آنچه گفته شد فقط برای تاریخهای میلادی بهکار میروند و برای استفاده از تاریخ شمسی باید از یک کلاس خارجی استفاده کنید. اینکه کلاس خارجی چیست فعلا نباید مدنظر شما باشد. اگر به خاطر داشته باشید روش include کردن فایلها را در جلسات گذشته مرور کردیم. شما باید فایل مربوط به کلاس تاریخ شمسی را به فایل موردنظر خود که قصد استفاده از تاریخ شمسی را در آن دارید inlcude کرده و سپس به جای تابع ()date از ()jdate استفاده کنید. تمامی عملکردهای تابع ()jdate دقیقا شبیه به تابع ()date است. ابتدا فایل jdf.php را از این لینک دانلود کنید و سپس فایل jdf.php را در کنار فایل موردنظر خود به عنوان مثال در پوشه time که در پوشه htdocs ساخته بودید قرار دهید. سپس در فایلی که قصد استفاده از تاریخ هجری شمسی را در آن دارید فایل jdf.php را include کنید. بهعنوان مثال به کد زیر دقت کنید:
<?php
include (“jdf.php”);
print jdate(“j of F Y, \a\\t g.i a”, time());
?>
در کد بالا ما فقط date را به jdate تغییر دادیم. در اینصورت نتیجه اجرای کد فوق چیزی شبیه به زیر خواهد بود:
۳ ۱۳۹۵ تابستان تیر ۱۳۹۵, at ۱.۵۴ ب.ظ
همانطور که میبینید فرمتی که برای نمایش تاریخ میلادی بود را بدون تغییر برای تاریخ هجری شمسی استفاده کردیم که زیاد جالب نیست. میتوان از فرمتی مثل زیر استفاده کرد. کد بالا را به شکل زیر تغییر دهید:
<?php
include (“jdf.php”);
print jdate(“j F Y – h:s”, time());
?>
نتیجه کد بالا به شکل زیر خواهد بود:
۳ تیر ۱۳۹۵- ۰۱:۲۸
قطعا فرمت بالا نسبت به فرمت قبلی برای کاربران فارسی زبان گویاتر است. لازم به ذکر است که در فایلی که در بالا لینک دانلود آن را قرار دادیم، راهنمای کامل تابع jdate نیز وجود دارد که از سایت رسمی سازنده آن منتشر شده و برای یادگیری عمیقتر این توابع jdf.php میتوانید به راهنمای موجود در فایل دانلود شده یا وبسایت http://jdf.scr.ir مراجعه کنید.
در جلسات بعدی با مباحث پیشرفتهتر و جزئیتر دیگری در پیاچپی آشنا خواهید شد. نظرات و سوالات خود را در مورد مباحث این جلسه مثل همیشه در بخش دیدگاهها با زومیت و سایر کاربران به اشتراک بگذارید.