
معمولاً در برنامه نویسی نیاز داریم زمان فعلی را داشته باشیم یا زمان و تاریخ را برای نمایش به فرمتهای مختلف تبدیل کنیم. در این آموزش ۴ تابع کاربردی را برای کار با زمان و تاریخ در PHP بررسی میکنیم و با مثال نحوه اجرای آنها را میبینیم.
اول از همه خوب است بدانیم زمان در سیستمهای کامپیوتری چگونه نگهداری میشود. در سیستمهای Unix مقدار ثانیه گذشته شده از تاریخ یک ژانویه 1970 میلادی بهعنوان زمان شناخته میشود.
با داشتن این ثانیهها و انجام محاسبات، میتوانیم سال، ماه، روز و ساعت و دقیقه فعلی را محاسبه کنیم. 🙂 به این عدد اصطلاحاً timestamp میگوییم.
فهرست محتوای آموزش
زمان در PHP
برای گرفتن timestamp در PHP از تابع time()
استفاده میکنیم. این تابع هیچ آرگومان ورودی ندارد و یک عدد را به عنوان خروجی به ما میدهد. این عدد همان ثانیههای گذشته از لحظه مبدأ زمانی است.
<?php
echo time(); // 1643827251
?>
در صورت نیاز باید این عدد را به زمان قابل فهم توسط انسان تبدیل کنیم. یعنی با تقسیمهای متوالی زمان و تاریخ این عدد را به دست آوریم. در ادامه با ۲ تابع دیگر آشنا میشویم که این محاسبات را برای ما انجام میدهند.
اگر با مفهوم تابع در برنامه نویسی آشنایی ندارید، پیشنهاد میکنم برای یادگیری بیشتر جلسه تابع در PHP را ببینید.
آرایه زمان و تاریخ PHP
تابع getdate()
یک آرگومان ورودی اختیاری از نوع زمانبندی یونیکس (Unix Timestamp) میگیرد و زمان و تاریخ معادل آن را برمیگرداند.
اگر این ورودی را تعریف نکنیم، مقادیر خروجی بر اساس لحظه فعلی سیستم محاسبه میشوند.
خروجی این تابع یک آرایه PHP است که میتوانیم از عناصر مختلف آن در جای مناسب استفاده کنیم. نمونه خروجی این تابع برای زمان فعلی را در کد زیر میبینید. برای چاپ آرایه در خروجی از دستور print_r استفاده کردهام.
<?php
print_r( getdate() ); // == print_r( getdate(time()) )
/* output:
Array (
[seconds] => 5
[minutes] => 41
[hours] => 19
[mday] => 2
[wday] => 3
[mon] => 2
[year] => 2022
[yday] => 32
[weekday] => Wednesday
[month] => February
[0] => 1643827265 ) */
اگر یک timestamp را به عنوان ورودی به این تابع بدهم، مقادیر خروجی بر اساس زمان موردنظرمان تولید میشود. برای مثال، به نمونه خروجی در تصویر زیر دقت کنید:

نمایش تاریخ در PHP
تابع date()
در PHP زمان را در قالببندی دلخواهمان نمایش میدهد. به کمک این تابع میتوانیم زمان یونیکس را در قالب رشته متنی PHP با ساختارهای مختلف نمایش دهیم.
date( $format, $timestamp );
- ورودی اول (format) ساختار نمایش زمان را مشخص میکند. این ورودی یک رشته از کاراکترهای مرتبط با زمان Unix است که در جلوتر از آن مثالهایی میبینیم.
- اگر بخواهیم یک زمان خاص را نمایش دهیم، timestamp آن را به عنوان آرگومان دوم مشخص میکنیم.
اگر آرگومان دوم تعریف نشود، بهطور پیشفرض زمان فعلی سیستم محاسبه و نمایش داده میشود.
در باکس زیر چند ساختار و نمونه از استفاده از تابع زمان و تاریخ در PHP نوشتهام:
<?php
echo date("y/m/d h:i:s a"); // 22/02/02 07:41:56 pm
echo date("jS F Y"); // 2nd February 2022
echo date("j M Y"); // 2 Feb 2022
echo date("H:i:s"); // 19:42:25
سعی کردم در قطعه کد بالا، نمونههای مختلفی از کاراکترها را استفاده کنم تا با موارد رایج آن آشنا شوید. سعی میکنم در آموزش دیگری در مورد زمانبندی یونیکس بهطور مفصل توضیح دهم.
اگر دوست دارید مثالهای بیشتری از این ساختارها ببینید، صفحه مستندات تابع date جای خوبی است.
ایجاد زمان یونیکس از زمان خاص
تا الآن یاد گرفتیم چطور زمان یونیکس را به رشته متنی تبدیل کنیم. گاهی لازم است برعکس این کار را انجام دهیم؛ یعنی timestamp یک تاریخ و ساعت خاص را در PHP محاسبه کنیم.
تابع mktime()
در PHP برای تبدیل زمان به زمان Unix استفاده میشود.
این تابع ۶ ورودی میگیرد و ساختار کلی آن شبیه به باکس کد زیر است:
mktime(hour, minute, second, month, day, year);
احتمالاً از اسم آرگومانهای اول تا ششم متوجه میشود که به ترتیب برای ساعت، دقیقه، ثانیه، ماه، روز و سال هستند.
در فراخوانی تابع محاسبه زمان در زیر، یک ساعت خاص در روز 9 می 2018 را به تابع date()
دادهام تا با فرمت موردنظرم نمایش دهد:
<?php
echo date( "Y-m-d H:i:s", mktime(19, 27, 45, 5, 9, 2018) );
// 2018-05-09 19:27:45
برای اجرای این خط، ابتدا timestamp زمان موردنظرمان ایجاد شده و چیزی شبیه به کد زیر اجرا میشود:
echo date( "Y-m-d H:i:s", 1525886865 );
به غیر از اولی (hour)، میتوانیم بقیه را تعریف نکنیم؛ در اینصورت تاریخ امروز و دقیقه و ثانیه همین لحظه در محاسبه زمان PHP در نظر گرفته میشود.
یک روش رایج برای ذخیرهسازی زمان و تاریخ در PHP و سایر زبانها این است که timestamp موردنظر را نگهداری میکنند. از این پس هر زمان که نیاز شد، این عدد را (از دیتابیس) فراخوانی کرده و با تابع date()
در فرمت دلخواه نمایش میدهند.
برای اینکه یک مرور کوتاه روی توابع بحثشده داشته باشیم، جدول زیر را بهعنوان جمعبندی بررسی کنید:
تابع | خروجی |
---|---|
time() | timestamp فعلی سیستم |
getdate() | آرایهای از تاریخ و ساعت |
date() | نمایش زمان در فرمت دلخواه |
mktime() | تبدیل زمان خاص به timestamp |
پیشنهاد میکنم کمی بیشتر با تابعهای تاریخ و زمان در PHP کار کنید. سعی کنید چند مثال برای خودتان زده و آنها را پیادهسازی کنید تا بهتر در ذهنتان بمانند.
اگر سؤال یا تجربهای دارید، بخش دیدگاهها برای شماست تا نظراتتان را به ما و دوستانتان به اشتراک بگذارید. 🙂
اگر دانشجوی دوره رایگانمون هستید، تبریک میگم، چون مباحث مقدماتی و کمی از متوسط را پشت سر گذاشتید و از جلسهٔ بعدی وارد مباحث پیشرفته خواهید شد:
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام امید جلالی بزرگوار
یه سوال دارم من میخوام یک پروژه پارکینگ راه اندازی کنم میخوام با این مشخصات
مبلغ ثابت ورودی تا یکساعت 10000 تومان
مبلغ به ازای هر یک ساعت 2000 تومان
لطفا راهنمایی کنید چطوری باید این کد اجرا و بنویسم ممنونم
سلام
پیشنهاد میکنم زمان ورود رو ثبت کنید. وقتی قراره کاربر خارج بشه، زمان فعلی رو بگیرید و محاسبات لازم رو انجام بدید.
یعنی نیاز نیست مثلاً هر یک ساعت بیاید و برای همه حساب کنید. لحظه ورود رو داشته باشید و در زمان خروج، اختلاف زمان و مبلغ کل رو حساب کنید.
سلام وقتتون بخیر
میخام یک تاریخ که از ورودی دریافت کردم مدت زمان باقی مانده اش از تاریخ الان و بر حسب ثانیه و دقیقه و ساعت و روز بدست بیارم میتونین راهنماییم کنین؟
سلام
یه راهحل اولیهاش اینه که هر دو زمان رو به ثانیه محاسبه کنید (همون timestamp) و پس از منها کردن، به دقیقه و ساعت و روز تبدیلش کنید. (با تقسیم بر 60 برای دقیقه، بر 24 برای ساعت و …)
مستندات کلاس DateTime رو هم بررسی کنید. متدهایی برای محاسبه تفاضل دو زمان داره اما مطمئن نیستم به فرمتی که میخواید هم خروجی میده یا نه.
سلام. من کد
echo date(“H:i:s”);
رو نوشتم اما به جای ساعت 13 ساعت10:30 رو نمایش میده. داره از ساعت سیستم میخونه ولی ساعت سیستمم 13 هست.کدی که مرکز ساعت رو نشون میده رو هم روی ایران تهران گذاشتم فرقی نکرد.
1- شما به این مشکل برخوردین؟
2- و کدی هست که به ساعت الان چند ساعت رو جمع کنه؟مثلا همون 10:30 رو با 2:30 جمع کرد تا بشه 13؟
سلام
این دستور رو روی localhost اجرا میکنید یا روی هاست؟ این دستور ساعت سیستم وبسروری که داره روش اجرا میشه رو برمیگردونه.
برای جمع کردن زمانها در php میتونید از شیء کلاس DateTime استفاده کنید. البته یه راه حل دستی هم اینه که هر دو رو تبدیل به ثانیه کنید (مثلاً با
strtotime()
) عملیات رو انجام بدید و سپس تبدیلش کنید به فرمت نمایشی دلخواه.سلام ممنون از شما
برای زمان شمسی روشی توی php داریم؟
سلام
باید زمان میلادی رو به شمسی تبدیل کنید. از کتابخونههایی که برای این کار هست میتونید استفاده کنید. مثلاً برای php pure کتابخونه morilog/jajli یا jdf موارد محبوبی هستند.