تاریخ و زمان یکی از جنبههای اصلی وبسایتها و وباپلیکیشنهای کاربردی هستند. مدیریت صحیح و دستکاری تاریخها برای نمایش رویدادهای مختلف، برنامهریزی کارها، دریافت اطلاعات از پایگاه داده، محاسبه زمان و بسیاری از موارد دیگر امری ضروری است. تابع Date در PHP ابزار قدرتمندی است که کار با تاریخ و زمان را ساده میکند. این تابع به توسعه دهندگان امکان میدهد تا تاریخها را به روشهای مختلف قالببندی کنند و عملیات ساده تاریخ و زمان را نیز انجام دهند. در مطلب پیشِ رو از مجله فرادرس به بررسی تابع Date در PHP و قابلیتهای آن خواهیم پرداخت. با مطالعه این مطلب با روشهای مختلف قالببندی تاریخ، استخراج و تفکیک اجزای یک تاریخ خاص، انجام محاسبات ریاضی بر روی تاریخها و مدیریت مناطق زمانی در PHP آشنا خواهید شد.
این نوشته راهنمای جامعی است که به توسعه دهندگان تازهکار در درک اصول اولیه تابع Date و به توسعه دهندگان با تجربه در یادگیری تکنیکهای پیشرفته کار با تاریخ و زمان کمک خواهد کرد.
کاربرد تابع Date در PHP چیست؟
Date یکی از توابع داخلی PHP است که به منظور قالببندی تاریخ و زمان مورد استفاده قرار میگیرد. این تابع با توجه به پارامترهای دریافتی یک مقدار رشتهای را در خروجی برمیگرداند که نشان دهنده تاریخ و زمان است. به عنوان مثال، میتوان از تابع Date در PHP برای نمایش تاریخ و زمان فعلی یا آینده در صفحه وب استفاده کرد.
علاوه بر این، در صورت دریافت اطلاعات از پایگاه داده MySQL با استفاده از PHP میتوان از تابع Date برای تبدیل مقادیر دریافتی به فرمت قابل خواندن استفاده کرد. از این قابلیت برای درج تاریخ و زمان مربوط به پستهای وبلاگ یا مقالات خبری استفاده میشود. در ادامه این نوشته تابع Date در PHP به همراه چندین مثال کاربردی و متدهای موجود در آن به طور کامل مورد بررسی قرار خواهد گرفت.
سینتکس تابع Date در PHP
در این بخش به بررسی سینتکس تابع Date و پارامترهای دریافتی آن خواهیم پرداخت. سینتکس تابع Date در PHP به صورت زیر است.
1date(string $format, int $timestamp): string;
با توجه به قطعه کد ارائه شده در بالا تابع Date دارای دو پارامتر ورودی است و مقداری از نوع رشته را نیز برمیگرداند. یکی از پارامترهای دریافتی تابع Date از نوع اجباری و پارامتر دیگر نیز از نوع اختیاری است. در ادامه پارامترهای ورودی تابع Date را مورد بررسی قرار خواهیم داد.
- $format
: این پارامتر از نوع رشتهای و اجباری است که نحوه قالببندی تاریخ و زمان را مشخص میکند.
- $timestamp
: این پارامتر از نوع برچسب زمان است که به بیان دقیقتر تعداد ثانیههای سپری شده از ۱ ژانویه ۱۹۷۰ میلادی (۱۳۴۸ شمسی) تا یک تاریخ خاص را مشخص میکند. قرار دادن این پارامتر به عنوان ورودی در تابع Date اختیاری است و در صورت عدم درج آن تابع به طور پیشفرض از زمان فعلی سیستم استفاده میکند.
منظور از timestamp در PHP چیست؟
«مُهر زمانی یونیکس» (Unix Timestamp) یک عدد صحیح ساده را نشان میدهد که بیانگر تعداد ثانیههای سپری شده از ۱ ژانویه ۱۹۷۰ میلادی (۱۳۴۸ شمسی) تا یک تاریخ خاص است. در واقع timestamp یک استاندارد پذیرفته شده و رایج در علوم کامپیوتر است، زیرا مستقل از منطقه زمانی عمل میکند و برای تمام مناطق زمانی یک عدد ثابت را ارائه میدهد. استفاده از timestamp انجام محاسبات ساده با استفاده از اطلاعات زمانی را تسهیل میکند. قطعه کد زیر نحوه به دست آوردن timestamp در PHP برای لحظه فعلی را نشان میدهد.
1<?php
2 echo time();
3؟>
خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
1716884228
مقدار ارائه شده در بالا یک عدد صحیح از نوع timestamp را نشان میدهد. با استفاده از این مقدار میتوان تاریخ و زمان دقیق را با توجه به منطقه زمانی مورد نظر به دست آورد.
فرمت های تاریخ در PHP
تابع Date در PHP به منظور نمایش زمان و تاریخ مورد استفاده قرار میگیرد. همان طور که پیشتر نیز عنوان شد این تابع یک پارامتر اجباری از نوع رشتهای با نام format
دریافت میکند که نحوه قالببندی تاریخ و زمان با استفاده از این متغیر تعیین میشود. کلاس DateTime در PHP کاراکترهای مختلفی را برای تعیین قالببندی تاریخ و زمان ارائه میدهد. در ادامه، به منظور آشنایی بیشتر با این کاراکترها برخی از آنها معرفی شدهاند.
- Y – نشانگر سال با استفاده از ۴ رقم (مثال: 2024)
- y – نشانگر سال با استفاده از ۲ رقم (مثال: 24)
- F – نام ماه میلادی به صورت کامل (مثال: September)
- M – نام ماه میلادی به صورت مختصر (مثال: Sep)
- m – نشان دهنده ماه به صورت عددی با ۲ رقم (مثال: 09)
- n – نشانگر ماه به صورت عددی بدون صفر (مثال: 9)
- d – نشانگر روز به صورت عددی با ۲ رقم (مثال: 08)
- j – نشانگر روز به صورت عددی بدون صفر (مثال: 8)
- D – نشان دهنده روز هفته به صورت خلاصه (مثال: Mon)
- l – نشان دهنده روز هفته به صورت کامل (مثال: Monday)
- N – نشانگر روز هفته به صورت عددی (مثال: 1 برای دوشنبه و 7 برای یکشنبه)
- w – نشانگر روز هفته به صورت عددی (مثال: 0 برای یکشنبه و 6 برای شنبه)
- W – نشان دهنده چندمین هفته از سال به صورت عددی (مثال: 37)
- z – نشان دهنده چندمین روز از سال به صورت عددی (مثال: بین 0 تا 365)
- G – نشانگر ساعت با فرمت ۲۴ ساعته بدون صفر ابتدایی (مثال: 9 یا 21)
- H – نشانگر ساعت با فرمت ۲۴ ساعته با صفر ابتدایی (مثال: 09 یا 21)
- i – نشانگر دقیقه با صفرهای ابتدایی (مثال: 05)
- s – نشانگر ثانیه با صفرهای ابتدایی (مثال: 07)
- a – نشانگر قبل از ظهر و بعد از ظهر با حروف کوچک لاتین (مثال: am یا pm)
- A – نشانگر قبل از ظهر و بعد از ظهر با حروف بزرگ لاتین (مثال: AM یا PM)
- U – مُهر زمانی یونیکیس
- S – اضافه کردن عبارات “th”، “rd”، “nd” و سایر موارد به انتهای تاریخهای عددی
- r – در صورت منفی بودن تفاضل دو تاریخ علامت “-” و در صورت مثبت بودن خالی قرار میدهد.
- R – در صورت منفی بودن تفاضل دو تاریخ علامت “-” و در صورت مثبت بودن علامت “+” را قرار میدهد.
با استفاده از این کاراکترها میتوان با توجه به نیاز خود فرمت تاریخ را سفارشیسازی کرد. در ادامه چند مثال ساده از نمایش تاریخ و زمان با استفاده از تابع Date در PHP به همراه کاراکترهای ارائه شده در بالا آورده شده است.
چگونه تاریخ و زمان را در PHP نمایش دهیم؟
برای نمایش تاریخ و زمان فعلی در فرمت دلخواه از تابع Date باید استفاده کرد. با توجه به کاراکترهای قابل استفاده در تابع Date میتوان تاریخ و زمان را در فرمت دلخواه نشان داد. قطعه کد زیر تاریخ و زمان فعلی را در فرمت مشخص شده نشان میدهد.
1$currentDate = date('Y-m-d H:i:s');
2echo $currentDate;
خروجی حاصل از اجرای قطعه کد بالا تاریخ و ساعت فعلی را برمیگرداند.
2024-06-02 08:23:29
در برنامه نویسی وب گاهی اوقات نیاز است تا تاریخ شمسی را به میلادی تبدیل کنیم. برای این منظور میتوانید فیلم آموزش رایگان تبدیل تاریخ شمسی به میلادی در PHP فرادرس را مشاهده کنید که لینک آن در ادامه آورده شده است.
نمایش سال جاری در PHP
برای نمایش سال جاری در PHP به سادگی میتوان از تابع Date به همراه کاراکتر متناظر با نمایش سال ( Y
یا y
) استفاده کرد. قطعه کد زیر سال جاری را در خروجی چاپ میکند.
1$currentYear = date('Y');
2echo $currentYear;
خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
2024
نمایش روز هفته در PHP
برای نمایش روز هفته در PHP نیز میتوان از کاراکترهای قالببندی مربوط به آن یعنی ( D
یا l
) استفاده کرد. قطعه کد زیر روز جاری هفته در PHP را به صورت کامل با حروف در خروجی چاپ میکند.
1$currentDayOfWeek = date('l');
2echo $currentDayOfWeek;
خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Sunday
یادگیری زبان PHP با فرادرس
استفاده از دورههای آموزشی ویدیویی یک روش اثبات شده و عالی برای یادگیری برنامه نویسی PHP است. آموزشهای ویدیویی باعث صرفهجویی در زمان و هزینه میشوند. علاوه بر این، مزیت دیگر آموزشهای ویدیویی انعطافپذیری بالای آنها است، زیرا فرد هر زمان که آمادگی داشته باشد میتواند آموزش ببیند و در صورت نیاز یک آموزش را چندین مرتبه مشاهده کند. فرادرس به عنوان یکی از بزرگترین پلتفرمهای آموزشی کشور، فیلم آموزشی متعددی را در حوزه برنامه نویسی PHP منتشر کرده است. به عنوان مثال، در مجموعه فیلمهای آموزش برنامه نویسی PHP فرادرس آموزشهای موضوعی و پروژه محور متعددی در دسترس شما قرار دارد.
برای شروع مسیر یادگیری برنامه نویسی PHP میتوانید دوره آموزشی زیر را مشاهده کنید که لینک آن در ادامه آورده شده است.
در ادامه مسیر یادگیری خود نیز میتوانید به سراغ آموزشهای پروژه محور PHP موجود در این مجموعه بروید که تعدادی از آنها در ادامه آورده شده است.
چند مثال عملی از پیادهسازی تابع Date در PHP
تابع Date در PHP ابزاری قدرتمند برای قالببندی تاریخ و زمان است. توسعه دهندگان میتوانند از این تابع در ترکیب با کلاسها، عملگرها و سایر توابع PHP استفاده کنند تا عملکرد مورد نظر را پیادهسازی کنند. در ادامه این بخش چندین مثال کاربردی از پیادهسازی تابع Date در PHP آورده شده است.
الحاق تاریخ و زمان به سایر رشتهها
توسعه دهندگان میتوانند با استفاده از عملگرهای PHP نظیر عملگر الحاق مقادیر تاریخ و زمان را با رشتهها و سایر متغیرها ترکیب کنند. مثال زیر نحوه انجام این کار را نشان میدهد.
1$today = date('Y-m-d'); // current year, month and day
2$message = 'The current date is: ' . $today;
3echo $message;
در مثال بالا قالببندی تاریخ توسط تابع Date مشخص شده است و تاریخ فعلی در متغیر $today
ذخیره شده است. سپس، مقدار متغیر $today
با رشتهای دیگر الحاق شده و در متغیر $message
ذخیره میشود. در نهایت، خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
The current date is: 2024-05-28
با اجرای قطعه کد بالا تاریخ فعلی نمایش داده میشود.
چگونه فرمت نمایش تاریخ در PHP را تغییر دهیم؟
برای تبدیل فرمت نمایش تاریخ در PHP ابتدا باید تاریخ مورد نظر را به timestamp تبدیل کرد و مجدداً با استفاده از کاراکترهای موجود و تابع Date فرمت دلخواه خود را ساخت. تابع Strtotime()
یکی از توابع PHP است که رشتهای از تاریخ و زمان را دریافت میکند و معادل timestamp آن را برمیگرداند. در نهایت میتوان مقدار بازگشتی از این تابع را با استفاده از تابع Date قالببندی کرد. پیشتر در مطلب زیر از مجله فرادرس فهرستی از ۴۰ تابع مهم در زبان PHP ارائه شده است.
قطعه کد زیر نحوه تغییر فرمت نمایش تاریخ در PHP را نشان میدهد.
1$dateString = '2023-08-19';
2$timestamp = strtotime($dateString);
3$formattedDate = date('l, F j, Y', $timestamp);
4echo $formattedDate;
خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Saturday, August 19, 2023
کلاس DateTime در PHP
کلاس DateTime در PHP روشی شیگرا برای کار با مقادیر تاریخ و زمان را ارائه میدهد و عملکردی بسیار مشابه با تابع date()
دارد. قطعه کد زیر مثالی از کاربرد این کلاس را نشان میدهد.
1$now = new DateTime();
2$formattedDate = $now->format('l, F j, Y H:i:s');
3echo $formattedDate;
در مثال بالا ابتدا یک شی از کلاس DateTime با نام $now
ایجاد شده است که تاریخ و زمان فعلی را نشان میدهد. سپس، از متد format()
موجود در کلاس DateTime برای نمایش تاریخ و زمان در فرمت دلخواه استفاده شده است. خروجی حاصل از اجرای قطعه کد بالا نیز به صورت زیر خواهد بود.
Tuesday, May 28, 2024 15:49:21
تجزیه تاریخهای نسبی
در زبان برنامه نویسی PHP این امکان فراهم است تا به سادگی تاریخهای نسبی همچون فردا، هفته آینده، دوشنبه بعد و سایر موارد را با استفاده از تابع strtotime()
یا متد format()
از کلاس DateTime تجزیه کرد. در ادامه چندین مثال در این خصوص ارائه شده است.
1$tommorow = 'tomorrow';
2$date = new DateTime($tommorow);
3echo "Tommorow's date is: " . $date->format('Y-m-d, l') . "<br>";
4
5$nextWeek = strtotime('next week');
6echo "Exactly a week from now is: " . date('Y-m-d, l', $nextWeek) . "<br>";
7
8$nextMonth = strtotime('next month');
9echo "Next month is: " . date('F Y', $nextMonth). "<br>";
10
11$next2Month = strtotime('next 2 months');
12echo "Any unsupported string will return: " . date('F Y', $next2Month). "<br>";
13
14$secondMondayOfNextMonth = strtotime('second monday of next month');
15echo "Second Monday of next month is: " . date('l Y-m-d', $secondMondayOfNextMonth). "<br>";
16
17$lastDayNextMonth = strtotime('last day of next month');
18echo "Last day of next month is: " . date('l Y-m-d', $lastDayNextMonth). "<br>";
19
20$twoWeeksAgo = strtotime('2 weeks ago');
21echo "Exactly 2 weeks from now is: " . date('l Y-m-d', $twoWeeksAgo). "<br>";
22
23$nextMonday = strtotime('next monday');
24echo "Next Monday's date is: " . date('l Y-m-d', $nextMonday). "<br>";
25
26$nextFriday = strtotime('next friday');
27echo "Next Friday's date is: " . date('l Y-m-d', $nextFriday). "<br>";
28
29$twoDaysFromNow = strtotime('2 days');
30echo "Exactly 2 days from now is " . date('l Y-m-d H:i:s', $twoDaysFromNow). "<br>";
در قطعه کد بالا از تابع strtotime
برای تبدیل رشتههای ورودی به شی از نوع Date استفاده شده است. خروجی حاصل از اجرای کد بالا با توجه به زمان اجرا نتیجه متفاوتی خواهد شد که در ادامه خروجی حاصل از اجرای این قطعه کد آورده شده است.
Tomorrow’s date is: 2023-09-13, Wednesday Exactly a week from now is: 2023-09-18, Monday Next month is: October 2023 Any unsupported string will return: January 1970 Second Monday of next month is: Monday 2023-10-09 Last day of next month is: Tuesday 2023-10-31 Exactly 2 weeks from now is: Tuesday 2023-08-29 Next Monday's date is: Monday 2023-09-18 Next Friday's date is: Friday 2023-09-15 Exactly 2 days from now is Thursday 2023-09-14 15:46:59
قالببندی timestamps در PHP
به لطف وجود متد format()
امکان تبدیل timestamp به رشتههای خواندنی در PHP وجود دارد. قطعه کد زیر نحوه تبدیل timestamps به تاریخ را نشان میدهد.
1$timestamp = 1694531229;
2$date = new DateTime('@' . $timestamp);
3echo $date->format('Y-m-d H:i:s');
در مثال بالا متغیر $timestamp
دارای مقدار عددی از نوع timestamp است که با فراخوانی متد format()
و تعیین قالببندی مورد نظر رشته متناظر با آن تولید خواهد شد. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
2023-09-12 15:07:09
انجام عملیات ریاضی بر روی تاریخ در PHP
گاهی اوقات با توجه به نیاز پروژه لازم است تا عملیات ریاضی بر روی تاریخها انجام شود. برای این منظور ممکن است لازم باشد تا تاریخهای مختلف را با یکدیگر جمع یا تفریق کنیم. در ادامه این بخش نحوه جمع یا تفریق کردن تاریخها در PHP به همراه مثال آورده شده است.
جمع کردن تاریخ ها در PHP
در زبان برنامه نویسی PHP برای اضافه کردن به تاریخ یا جمع کردن دو تاریخ با یکدیگر میتوان از تابع add
و کلاس DateInterval
استفاده کرد. در ادامه مثالی در این خصوص ارائه شده است.
1$date = new DateTime('2023-09-12');
2$date->add(new DateInterval('P5D'));
3echo $date->format('Y-m-d');
در مثال بالا متغیر $date
از نوع رشته تعریف شده است که تاریخ 2023-09-12
را در خود نگهداری میکند. برای اضافه کردن ۵ روز به این تاریخ از متد add
به همراه کلاس DateInterval
استفاده شده است. در واقع، عبارت P5D
نشان دهنده ۵ روز است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
2023-09-17
مثالهای زیر نحوه اضافه کردن هفته، ماه و سال به تاریخ مورد نظر را نشان میدهد.
1$twoWeeks = new DateTime('2023-09-12');
2$twoWeeks->add(new DateInterval('P2W'));
3echo "Given date plus two weeks = " . $twoWeeks->format('l, Y-m-d');
4
5$threeMonths = new DateTime('2023-09-12');
6$threeMonths->add(new DateInterval('P3M'));
7echo "<br> Given date plus 3 months = " . $threeMonths->format('l, Y-m-d');
8
9$fourYear = new DateTime('2023-09-12');
10$fourYear->add(new DateInterval('P4Y'));
11echo "<br> Given date plus 4 years = " . $fourYear->format('l, Y-m-d');
در مثال بالا عبارت P2W
نشان دهنده ۲ هفته، عبارت P3M
نشان دهنده ۳ ماه و عبارت P4Y
نشان دهنده ۴ سال هستند که با استفاده از متد add
و کلاس DateInterval
به تاریخ مورد نظر اضافه شدهاند. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Given date plus 2 weeks = Tuesday, 2023-09-26 Given date plus 3 months = Tuesday, 2023-12-12 Given date plus 4 years = Sunday, 2027-09-12
جمع کردن تاریخ ها در PHP با تابع modify
برای اضافه کردن مقادیر به تاریخها در PHP علاوه بر روش فوق میتوان از تابع modify نیز استفاده کرد. با استفاده از تابع modify در PHP به سادگی میتوان مقادیر مورد نظر خود را به تاریخ اضافه کرد.
در ادامه چندین مثال از نحوه جمع کردن تاریخها در PHP با استفاده از تابع modify ارائه شده است.
1$twoWeeks = new DateTime('2023-09-12');
2$twoWeeks->modify('+2 weeks');
3echo "Given date plus two weeks = " . $twoWeeks->format('l, Y-m-d');
4
5$threeMonths = new DateTime('2023-09-12');
6$threeMonths->modify('+3 months');
7echo "<br> Given date plus 3 months = " . $threeMonths->format('l, Y-m-d');
8
9$fourYear = new DateTime('2023-09-12');
10$fourYear->modify('+4 years');
11echo "<br> Given date plus 4 years = " . $fourYear->format('l, Y-m-d');
در قطعه کد ارائه شده در بالا عبارت +2 weeks
نشان دهنده افزایش به میزان ۲ هفته، عبارت +3 months
نشان دهنده افزایش به میزان ۳ ماه و عبارت +4 years
نشان دهنده افزایش به میزان ۴ سال است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Given date plus two weeks = Tuesday, 2023-09-26 Given date plus 3 months = Tuesday, 2023-12-12 Given date plus 4 years = Sunday, 2027-09-12
با توجه به خروجی ارائه شده در بالا به ترتیب به میزان ۲ هفته، ۳ ماه و ۴ سال به تاریخ 2023-09-12
اضافه شده است.
تفاضل تاریخ ها در PHP
برای محاسبه اختلاف بین دو تاریخ در PHP یا کم کردن دو تاریخ از یکدیگر میتوان از تابع sub
همراه با کلاس DateInterval
موجود در PHP استفاده کرد. در ادامه چندین مثال از نحوه محاسبه تفاضل بین دو تاریخ ارائه شده است.
1$oneDay = new DateTime('2023-09-12');
2$oneDay->sub(new DateInterval('P1D'));
3echo "Given date minus one day = " . $oneDay->format('l, Y-m-d');
4
5$twoWeeks = new DateTime('2023-09-12');
6$twoWeeks->sub(new DateInterval('P2W'));
7echo "<br> Given date minus 2 weeks = " . $twoWeeks->format('l, Y-m-d');
8
9$threeMonths = new DateTime('2023-09-12');
10$threeMonths->sub(new DateInterval('P3M'));
11echo "<br> Given date minus 3 months = " . $threeMonths->format('l, Y-m-d');
12
13$fourYear = new DateTime('2023-09-12');
14$fourYear->sub(new DateInterval('P4Y'));
15echo "<br> Given date minus 4 years = " . $fourYear->format('l, Y-m-d');
در مثال بالا عبارت P1D
نشان دهنده ۱ روز، عبارت P2W
نشان دهنده ۲ هفته، عبارت P3M
نشان دهنده ۳ ماه و عبارت P4Y
نشان دهنده ۴ سال هستند که با استفاده از تابع sub
از تاریخ 2023-09-12
کم شدهاند. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Given date minus 1 day = Monday, 2023-09-11 Given date minus 2 weeks = Tuesday, 2023-08-29 Given date minus 3 months = Monday, 2023-06-12 Given date minus 4 years = Thursday, 2019-09-12
محاسبه تفاضل تاریخ ها در PHP با تابع modify
علاوه بر روش ارائه شده در بالا یعنی استفاده از تابع sub
برای محاسبه تفاضل بین دو تاریخ در PHP میتوان از تابع modify نیز استفاده کرد. مثالهای زیر نحوه استفاده از تابع modify در PHP به منظور محاسبه تفاضل بین دو تاریخ را نشان میدهد.
1$oneDay = new DateTime('2023-09-12');
2$oneDay->modify('-1 day');
3echo "Given date minus one day = " . $oneDay->format('l, Y-m-d');
4
5$twoWeeks = new DateTime('2023-09-12');
6$twoWeeks->modify('-2 weeks');
7echo "<br> Given date minus 2 weeks = " . $twoWeeks->format('l, Y-m-d');
8
9$threeMonths = new DateTime('2023-09-12');
10$threeMonths->modify('-3 months');
11echo "<br> Given date minus 3 months = " . $threeMonths->format('l, Y-m-d');
12
13$fourYear = new DateTime('2023-09-12');
14$fourYear->modify('-4 years');
15echo "<br> Given date minus 4 years = " . $fourYear->format('l, Y-m-d');
خروجی قطعه کد بالا تفاوتی با کدهای ارائه شده در بخش قبلی ندارد. در ادامه خروجی حاصل از اجرای قطعه کد بالا آورده شده است.
Given date minus one day = Monday, 2023-09-11 Given date minus 2 weeks = Tuesday, 2023-08-29 Given date minus 3 months = Monday, 2023-06-12 Given date minus 4 years = Thursday, 2019-09-12
بعد از آشنایی با قالببندی، تجزیه و انجام محاسبات ریاضی بر روی تاریخها در ادامه نوشته تابع Date در PHP با نحوه مدیریت زمان آشنا خواهید شد.
انجام عملیات ریاضی بر روی زمان در PHP
به لطف وجود کلاس DateTime در PHP و متدهای موجود در آن میتوان عملیات ریاضی مختلفی را بر روی زمانها انجام داد. در ادامه روشهای موجود برای افزودن یا کاستن از یک زمان خاص در PHP ارائه شده است.
اضافه کردن به زمان در PHP
انجام عملیات ریاضی بر روی زمان در PHP امری بسیار رایج است و توسعه دهندگان گاهی اوقات نیاز دارند تا مقدار مشخصی را به زمان اضافه کنند. در ادامه این بخش چندین مثال از نحوه اضافه کردن ثانیه، ساعت و دقیقه به زمان در PHP آورده شده است.
1$addSeconds = new DateTime('09:30:00');
2$addSeconds->add(new DateInterval('PT30S'));
3echo "Given time plus 30 seconds = ". $addSeconds->format('l, H:i:sa');
4
5$addMin = new DateTime('22:30:00');
6$addMin->add(new DateInterval('PT50M'));
7echo "<br> Given time plus 50 minutes = ". $addMin->format('l, H:i:sa');
8
9$addHours = new DateTime('06:30:00');
10$addHours->add(new DateInterval('PT2H'));
11echo "<br> Given time plus 2 hours = ". $addHours->format('l, H:i:sa');
همانند بخش قبلی برای اضافه کردن مقداری مشخص به زمان از تابع add
به همراه کلاس DateInterval
استفاده شده است. در مثال بالا قرار دادن عبارت PT30S
نشان دهنده ۳۰ ثانیه، عبارت PT50M
نشان دهنده ۵۰ دقیقه و عبارت PT2H
نشان دهنده ۲ ساعت خواهد بود که با استفاده از تابع add
این مقادیر به زمان مشخص شده اضافه خواهند شد. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Given time plus 30 seconds = Saturday, 09:30:30am Given time plus 50 minutes = Saturday, 23:20:00pm Given time plus 2 hours = Saturday, 08:30:00am
اضافه کردن به زمان در PHP با استفاده از تابع modify
همانند اضافه کردن مقدار به تاریخ برای افزودن مقدار مشخصی به زمان نیز امکان استفاده از تابع modify در PHP وجود دارد. قطعه کد زیر مثال بالا را با استفاده از تابع modify در PHP پیادهسازی میکند.
1$addSeconds = new DateTime('09:30:00');
2$addSeconds->modify('+30 seconds');
3echo "Given time plus 30 seconds = ". $addSeconds->format('l, H:i:sa');
4
5$addMin = new DateTime('22:30:00');
6$addMin->modify('+50 minutes ');
7echo "<br> Given time plus 50 minutes = ". $addMin->format('l, H:i:sa');
8
9$addHours = new DateTime('06:30:00');
10$addHours->modify('+2 hours');
11echo "<br> Given time plus 2 hours = ". $addHours->format('l, H:i:sa');
خروجی حاصل از اجرای قطعه کد بالا نیز مشابه خروجی قطعه کد قبلی است.
کم کردن از زمان در PHP
نحوه کم کردن از زمان در PHP مشابه افزودن به زمان است با این تفاوت که برای کاستن از زمان باید از تابع sub
استفاده کرد. مثال زیر نحوه کم کردن از زمان در PHP با استفاده از تابع sub
را نشان میدهد.
1$minusSeconds = new DateTime('09:30:00');
2$minusSeconds->sub(new DateInterval('PT90S'));
3echo "Given time minus 90 seconds = ". $minusSeconds->format('l, H:i:sa');
4
5$minusMin = new DateTime('22:30:00');
6$minusMin->sub(new DateInterval('PT40M'));
7echo "<br> Given time minus 40 minutes = ". $minusMin->format('l, H:i:sa');
8
9$minusHours = new DateTime('06:30:00');
10$minusHours->sub(new DateInterval('PT15H'));
11echo "<br> Given time minus 15 hours = ". $minusHours->format('l, H:i:sa');
در قطعه کد بالا عبارت PT90S
نشان دهنده ۹۰ ثانیه، عبارت PT40M
نشان دهنده ۴۰ دقیقه و عبارت PT15H
نشان دهنده ۱۵ ساعت است. با استفاده از تابع sub
این مقادیر از زمانهای مشخص شده کاسته شده است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Given time minus 90 seconds = Wednesday, 09:28:30am Given time minus 40 minutes = Wednesday, 21:50:00pm Given time minus 15 hours = Tuesday, 15:30:00pm
کم کردن از زمان در PHP با استفاده از تابع modify
علاوه بر روش ارائه شده در بالا امکان کاستن از زمان با تابع modify در PHP نیز وجود دارد. قطعه کد زیر پیادهسازی مثال بالا با استفاده از این تابع را نشان میدهد.
1$minusSeconds = new DateTime('09:30:00');
2$minusSeconds->modify('-90 seconds');
3echo "Given time minus 90 seconds = ". $minusSeconds->format('l, H:i:sa');
4
5$minusMin = new DateTime('22:30:00');
6$minusMin->modify('-40 minutes');
7echo "<br> Given time minus 40 minutes = ". $minusMin->format('l, H:i:sa');
8
9$minusHours = new DateTime('06:30:00');
10$minusHours->modify('-15 hours');
11echo "<br> Given time minus 15 hours = ". $minusHours->format('l, H:i:sa');
خروجی حاصل از اجرای قطعه کد بالا نیز مشابه بخش قبلی خواهد بود.
کار با فواصل زمانی در PHP
امکان محاسبه فاصله زمانی موجود بین دو زمان در زبان PHP با استفاده از تابع diff
وجود دارد. با کمک این تابع میتوان ثانیهها، دقیقهها و ساعتهای بین دو زمان مختلف را محاسبه کرد. قطعه کد زیر نحوه محاسبه فواصل زمانی در PHP را نشان میدهد.
1$time1 = new DateTime('06:30:00');
2$time2 = new DateTime('10:15:45');
3$interval = $time1->diff($time2);
4$seconds = $interval->h * 3600 + $interval->i * 60 + $interval->s . " seconds <br>";
5$minutes = $interval->h * 60 + $interval->i . " minutes <br>";
6$hours = $interval->h . " hours <br>";
7echo $seconds;
8echo $minutes;
9echo $hours;
خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
13545 seconds 225 minutes 3 hours
مدیریت منطقه زمانی در PHP
زبان PHP با ارائه کلاسی جداگانه تحت عنوان DateTimeZone به توسعه دهندگان امکان میدهد تا به آسانی با مناطق مختلف زمانی در برنامه خود کار کنند. به عنوان مثال، برای نمایش زمان در مناطق زمانی مختلف به صورت زیر میتوان از کلاس DateTimeZone استفاده کرد.
1$newyork = new DateTime('now', new DateTimeZone('America/New_York'));
2$tehran = new DateTime('now', new DateTimeZone('Asia/Tehran'));
3
4echo "Current time in New York: " . $newyork->format('l, Y-m-d H:i:s') . "<br>";
5echo "Current time in Tehran: " . $tehran->format('l, Y-m-d H:i:s') . "<br>";
در قطعه کد ارائه شده در بالا منطقه زمانی برای شهرهای نیویورک و تهران با استفاده از کلاس DateTimeZone
مشخص شده است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Current time in New York: Saturday, 2024-06-01 10:04:27 Current time in Tehran: Saturday, 2024-06-01 17:34:27
خروجی ارائه شده در قطعه کد بالا به زمان اجرای کد بستگی دارد. در نتیجه، با اجرای این کد در زمانهای مختلف نتیجه متفاوتی را شاهد خواهید بود.
چگونه اختلاف ساعت بین دو منطقه زمانی را در PHP محاسبه کنیم؟
یکی از کاربردهای بسیار رایج در زمینه کار با مناطق زمانی محاسبه اختلاف ساعت موجود بین دو نقطه جغرافیایی است. به عنوان مثال، گاهی اوقات نیاز است تا اختلاف ساعت بین دو نقطه مختلف جغرافیایی را در برنامه محاسبه کنیم. برای این منظور میتوان از تابع Date در PHP در ترکیب با کلاس DateTimeZone
استفاده کرد. قطعه کد زیر نحوه محاسبه اختلاف ساعت موجود بین دو شهر نیویورک و تهران را نشان میدهد.
1$tehran = new DateTime('14:30:00', new DateTimeZone('Asia/Tehran'));
2$newyork = new DateTime('14:30:00', new DateTimeZone('America/New_York'));
3
4$diff = $tehran->diff($newyork);
5
6echo $diff->format('The difference between the given times is %R%H hours %I minutes');
در مثال بالا ساعت فعلی شهر تهران با توجه به منطقه جغرافیایی آن محاسبه و در متغیر $tehran
ذخیره میشود. همچنین، متغیر $newyork
نیز ساعت فعلی شهر نیویورک را در خود ذخیره میکند. برای محاسبه اختلاف ساعت بین این دو شهر کافی است تا از تابع diff
در PHP استفاده کنیم.
The difference between the given times is +07 hours 30 minutes
خروجی ارائه شده در بالا اختلاف ساعت بین تهران و نیویورک را نشان میدهد که برابر +07:30
است.
مشاهده لیست کامل مناطق زمانی پشتیبانی شده در PHP
زبان برنامه نویسی PHP فهرست کاملی از مناطق زمانی را پوشش میدهد و توسعه دهندگان میتوانند از این مناطق زمانی در برنامه خود استفاده کنند. امکان دسترسی به فهرست کامل مناطق زمانی پشتیبانی شده در PHP از طریق کلاس DateTimeZone
وجود دارد. به عنوان مثال قطعه کد زیر فهرست کامل مناطق زمانی پشتیبانی شده در PHP را نشان میدهد.
1$no = 1;
2$timeZones = DateTimeZone::listIdentifiers();
3foreach ($timeZones as $tz) {
4 echo $no++ . ". ";
5 echo $tz . "<br>";
6}
خروجی حاصل از اجرای قطعه کد بالا تمام ۴۱۹ منطقه زمانی پشتیبانی شده توسط PHP را نشان میدهد. به دلیل طولانی بودن فهرست مناطق زمانی پشتیبانی شده در PHP خروجی حاصل از اجرای این قطعه کد را در این بخش قرار ندادیم. شما میتوانید با اجرای این قطعه کد فهرست کامل مناطق زمانی پشتیبانی شده توسط PHP را مشاهده کنید.
انجام چند عملیات ساده بر روی تاریخ و زمان در PHP
توسعه دهندگان با استفاده از تابع Date در PHP و امکانات موجود در آن میتوانند تاریخ و زمان را قالببندی و دستکاری کنند. در این بخش چندین مثال کاربردی از ترکیب تابع Date و سایر کلاسهای موجود در PHP آورده شده است. اگر قصد یادگیری مفاهیم موجود در زبان PHP به صورت عملی را دارید پیشنهاد میشود فیلم آموزش پروژه محور طراحی سایت فروشگاهی با PHP فرادرس را که لینک آن در ادامه آورده شده است را مشاهده کنید.
چگونه روز، ماه و سال را به صورت همزمان به تاریخ در PHP اضافه کنیم؟
امکان اضافه کردن همزمان روز، ماه و سال به یک تاریخ خاص در PHP به دو روش وجود دارد. روش اول استفاده از تابع modify است که یکی از متدهای موجود در کلاس DateTime
است. مثال زیر نحوه استفاده از این تابع برای افزودن روز، ماه و سال به صورت همزمان به یک تاریخ خاص را نشان میدهد.
1$date = new DateTime('now');
2$date->modify('+4 years +1 day +2 week +3 month');
3echo $date->format('Y-m-d') . "<br> <br>";
در مثال بالا ۴ سال، ۳ ماه، ۲ هفته و ۱ روز به تاریخ فعلی سیستم اضافه شده است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
2028-09-16
باید به این نکته نیز توجه کرد که خروجی قطعه کد بالا به زمان اجرای کد بستگی دارد. علاوه بر روش ارائه شده در بالا میتوان از کلاس DateTimeInterval
نیز برای اضافه کردن همزمان روز، ماه و سال به یک تاریخ خاص در PHP استفاده کرد. قطعه کد زیر پیادهسازی مثال بالا را با استفاده از کلاس DateTimeInterval
را نشان میدهد.
1$date = new DateTime('now');
2$date->add(new DateInterval('P4Y3M2W1D'));
3echo $date->format('Y-m-d') . "<br> <br>";
در مثال بالا عبارت P4Y3M2W1D
نشان دهنده ۴ سال، ۳ ماه، ۲ هفته و ۱ روز است که با استفاده از تابع add
این مقدار به تاریخ فعلی سیستم اضافه شده است.
چگونه ساعت، دقیقه و ثانیه را به صورت همزمان از یک زمان مشخص در PHP کم کنیم؟
امکان کم کردن همزمان روز، ماه و سال از یک تاریخ مشخص در PHP با استفاده از کلاس DateTimeInterval
و تابع sub
وجود دارد. قطعه کد زیر نحوه کم کردن همزمان روز، ماه و سال از یک تاریخ خاص در PHP را نشان میدهد.
1$date = new DateTime('12:00:00');
2$date->sub(new DateInterval('PT7H30M15S'));
3echo $date->format('H:i:s') . "<br> <br>";
در مثال بالا ۷ ساعت، ۳۰ دقیقه و ۱۵ ثانیه از زمان مشخص شده یعنی 12:00:00
کم شده است. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
04:29:45
علاوه بر روش بالا با استفاده از تابع modify نیز میتوان به صورت همزمان ساعت، دقیقه و ثانیه را از زمانی مشخص کم کرد. قطعه کد زیر پیادهسازی مثال بالا با استفاده از تابع modify را نشان میدهد.
1$date = new DateTime('12:00:00');
2$date->modify('-7 hours -30 minutes -15 seconds');
3echo $date->format('H:i:s') . "<br> <br>";
در مثال بالا از علامت منفی استفاده شده است که کم شدن زمان را نشان میدهد.
قالب بندی زمان های نسبی در PHP
با استفاده از تابع Date در PHP و متدهای موجود در کلاس DateTime
میتوان زمانهای نسبی را قالببندی کرد. قطعه کد زیر مثالی در این خصوص را نشان میدهد.
1$date = new DateTime('2023-05-13 14:00:00');
2$fewDaysAgo = new DateTime('2023-05-09 11:00:00');
3
4$diff = date_diff($fewDaysAgo, $date);
5echo $diff->format('%R%a days %h hours ago');
خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
+4 days 3 hours ago
محاسبه زمان اجرای کد در PHP
با استفاده از تابع hrtime
در PHP میتوان زمان لازم برای اجرای یک بلوک از کد را محاسبه کرد. در مثال زیر این مسئله نشان داده شده است.
1$start_time = hrtime(true);
2
3for ($i = 0; $i < 1000000; $i++) {
4
5}
6
7$end_time = hrtime(true);
8
9$elapsed_time = $end_time - $start_time;
10
11$elapsed_time_seconds = $elapsed_time / 1e9;
12
13echo "Elapsed time: {$elapsed_time_seconds} seconds";
در مثال بالا زمان شروع با استفاده از تابع hrtime
ثبت شده است. سپس، یک حلقه خالی تعریف شده است که به ۱۰۰۰۰۰ مرتبه اجرا میشود و زمان پایان را ثبت میکند. در نهایت زمان سپری شده برحسب نانو ثانیه محاسبه شده و بعد از تبدیل به ثانیه در خروجی چاپ میشود. خروجی حاصل از اجرای قطعه کد بالا به صورت زیر خواهد بود.
Elapsed time: 0.0100829 seconds
جمعبندی
تابع Date در PHP ابزاری بسیار قدرتمند برای کار با تاریخ و زمان است. این تابع به توسعه دهندگان امکان میدهد تا تاریخها را به روشهای مختف قالببندی کنند و عملیات مورد نظر خود را نیز بر روی تاریخها انجام دهند. تابع Date با ارائه طیف گستردهای از کاراکترهای قالب به توسعه دهندگان امکان میدهد تا خروجی را مطابق با نیاز خود سفارشیسازی کنند. بر همین اساس در این مطلب از مجله فرادرس تابع Date و کاربردهای آن به همراه مثال عملی مورد بررسی قرار گرفت. دنیای برنامه نویسی PHP پر از مفاهیم و بخشهای مختلفی است که برای تسلط به تمام جنبههای موجود در آن میتوانید از مجموعه آموزشهای برنامه نویسی PHP فرادرس استفاده کنید که لینک آن در ادامه آورده شده است.
در این مطلب سعی شد تا کاربردهای عملی تابع Date در برنامه نویسی نظیر محاسبه اختلاف بین دو تاریخ، اضافه کردن یا کم کردن مقدار مشخصی از یک تاریخ خاص، مدیریت مناطق زمانی مختلف و انجام عملیات بر روی تاریخ و زمان همراه با مثال مورد بررسی قرار گیرد.
source