تاریخ و زمان در PHP

درسنامه درس 15 از سری آموزش PHP 7
تاریخ و زمان در PHP

تابع ()date برای کار با تاریخ و زمان در PHP استفاده می شود و دارای ساختار زیر است:

date(format,timestamp)
پارامتر مورد نظر توضیحات
Format اجباری - قالب timestamp را مشخص می کند.
Timestamp اختیاری - timestamp خاصی را مشخص می کند. به صورت پیش فرض روی timestamp فعلی (زمان حال) تنظیم شده است.

نکته: timestamp یک سری کاراکتر است که زمان دقیق یک رویداد را مشخص می کند.

همانطور که گفته شد پارامتر format در تابع ()date مشخص کننده ی قالب تاریخ و زمان در php است. مهم ترین مقادیر format در این تابع عبارت اند از:

  • d - یک روز از ماه را مشخص می کند (01 تا 31)
  • m - یک ماه را مشخص می کند (01 تا 12)
  • Y - یک سال را مشخص می کند (چهار رقمی - مثلا 2019)
  • l (حرف L کوچک) - روز هفته را مشخص می کند (شنبه، یکشنبه و الی آخر)

کاراکترهای دیگری مانند / یا - یا . نیز می توانند به این کاراکترها اضافه شوند تا قالب بندی بهتری داشته باشیم.

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

<!DOCTYPE html>
<html>
<body>

<?php
echo "Today is " . date("Y/m/d") . "<br>";
echo "Today is " . date("Y.m.d") . "<br>";
echo "Today is " . date("Y-m-d") . "<br>";
echo "Today is " . date("l");
?>

</body>
</html>

مشاهده ی خروجی

حتما شما هم دیده اید که در قسمت footer وب سایت ها علامت کپی رایت را به همراه سال قرار می دهند. اگر می خواهید سال در این علامت به صورت خودکار به روز شود می توانید از کد زیر استفاده کنید:

<!DOCTYPE html>
<html>
<body>

© 2010-<?php echo date("Y");?>

</body>
</html>

مشاهده ی خروجی

دریافت زمان به شکل ساده

با کاراکترهای اصلی تاریخ آشنا شدیم اما هنوز کاراکترهای اصلی زمان را ندیده ایم. کاراکترهای زمان برای format به این شکل هستند:

  • H - ساعت روز در قالب 24 ساعته (از 00 تا 23)
  • h - ساعت روز در قالب 12 ساعته (01 تا 12)
  • i - دقیقه ها (00 تا 59)
  • s - ثانیه ها (00 تا 59)
  • a - دریافت am یا pm با حروف کوچک

مثال زیر زمان فعلی را به شما نمایش می دهد:

<!DOCTYPE html>
<html>
<body>

<?php
echo "The time is " . date("h:i:sa");
?>

</body>
</html>

مشاهده ی خروجی

نکته: زمان در PHP بر اساس زمان سرور تنظیم می شود بنابراین اگر زمان فعلی برای شما چند ساعتی عقب یا جلو بود به دلیل تفاوت منطقه ی زمانی شما با منطقه ی زمانی سرور است.

دریافت منطقه ی زمانی

همانطور که گفتیم ساعت ارائه شده در زبان PHP بر اساس منطقه ی زمانی سرور است. اگر دوست دارید منطقه ی زمانی سرور را روی زمان خاصی تنظیم کنید می توانید به شکل زیر عمل کنید:

<!DOCTYPE html>
<html>
<body>

<?php
date_default_timezone_set("America/New_York");
echo "The time is " . date("h:i:sa");
?>

</body>
</html>

مشاهده ی خروجی

در این مثال منطقه ی زمانی را روی America/New_York (شهر نیویورک) قرار داده ایم و سپس از آن خروجی گرفته ایم.

ساخت تاریخ با استفاده از ()mktime

همه می دانیم که پارامتر timestamp در تابع ()date یک timestamp را مشخص می کند. بنابراین اگر timestamp خاصی را مشخص نکنید از timestamp زمان حال استفاده می شود. حال تابع ()mktime یک timestamp خاص بر اساس Unix را برمی گرداند که معادل تاریخ خاصی است. Unix timestamp تعداد ثانیه هایی است که از اول ژانویه سال 1970 (ساعت 00:00:00) تا تاریخ معینی گذشته باشد. قالب کلی این تابع به شکل زیر است:

mktime(hour,minute,second,month,day,year)

به مثال زیر توجه کنید:

<!DOCTYPE html>
<html>
<body>

<?php
$d=mktime(11, 14, 54, 8, 12, 2014);
echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

</body>
</html>

مشاهده ی خروجی

ساخت تاریخ/زمان با ()strtotime

تابع ()strtotime تاریخ عادی و قابل خواندن برای انسان را تبدیل به زمان Unix می کند و دارای ساختار کلی زیر است:

strtotime(time,now)

به مثال این تابع توجه کنید:

<!DOCTYPE html>
<html>
<body>

<?php
$d=strtotime("10:30pm April 15 2014");
echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

</body>
</html>

مشاهده ی خروجی

البته PHP در این موارد کاملا هوشمندانه عمل می کند بنابراین می توانید چندین مقدار متفاوت قرار دهید:

<!DOCTYPE html>
<html>
<body>

<?php
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "<br>";

$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "<br>";

$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "<br>";
?>

</body>
</html>

مشاهده ی خروجی

دو مثال دیگر

مثال اول: این مثال تاریخ های شش شنبه ی آینده را نمایش می دهد:

<!DOCTYPE html>
<html>
<body>

<?php
$startdate=strtotime("Saturday");
$enddate=strtotime("+6 weeks", $startdate);

while ($startdate < $enddate) {
  echo date("M d", $startdate) . "<br>";
  $startdate = strtotime("+1 week", $startdate);
}
?>

</body>
</html>

مشاهده ی خروجی

توضیح: ابتدا یک روز هفته (Saturday به معنی شنبه) را انتخاب کرده و آن را به تابع strtotime داده ایم. همانطور که قبلا ذکر شد ()strtotime رشته ی عادی را گرفته و به تاریخ Unix تبدیل می کند. این اولین متغیر ما به نام startdate بود. برای متغیر بعدی که تاریخ پایان است باز هم از تابع strtotime استفاده کرده ایم اما این بار مقدار 6+ weeks را به آن داده ایم که یعنی 6 هفته بعد. سپس با یک حلقه ی while گفته ایم تا زمانی که startdate از enddate کمتر باشد تاریخ ها را echo کن و یک واحد (یک هفته - +1 week) به تاریخ فعلی اضافه کن.

مثال زیر تعداد روزهای باقی مانده تا 4 جولای را نمایش می دهد:

<!DOCTYPE html>
<html>
<body>

<?php
$d1=strtotime("July 04");
$d2=ceil(($d1-time())/60/60/24);
echo "There are " . $d2 ." days until 4th of July.";
?>

</body>
</html>

مشاهده ی خروجی

توضیح: در این مثال نیز همان کار را تکرار کرده ایم. یک رشته به strtotime داده ایم. سپس با تابع ()ceil مقدار روز های مانده به 4 جولای را به سمت بالا گِرد کرده ایم (مثلا اگر 1.6 روز مانده است، آنگاه عدد خروجی 2 روز می شود). در آخر هم مقدار مورد نظر را echo کرده ایم تا نمایش داده شود.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP 7 توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

رضا هزاره
28 آبان 1400
60 ها و 24 به چی معناست؟ اگر دوستان می دونه لطفا راهنمای کنه

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.