آموزش سیر تا پیاز تاریخ و زمان در PHP (استاندارد گوگل)
مقدمه
مدیریت تاریخ و زمان یکی از اساسیترین نیازها در توسعه وبسایتها و نرمافزارها است. از ثبت زمان ارسال یک پست گرفته تا محاسبه زمان انقضای تراکنشها و زمانبندی کارهای مختلف، همه نیازمند ابزارهای دقیق برای مدیریت زمان هستند. زبان PHP ابزارهای بسیار قدرتمندی را هم در قالب توابع رویهای (Procedural) و هم به صورت شیءگرا (Object-Oriented) برای این کار ارائه میدهد.
۱. تنظیم منطقه زمانی (Timezone) در PHP
قبل از کار با هرگونه تابع تاریخ و زمان در PHP، بسیار مهم است که منطقه زمانی یا Timezone سیستم خود را تنظیم کنید. در غیر این صورت، زمانها بر اساس تنظیمات پیشفرض سرور (که معمولاً UTC است) نمایش داده میشوند.
برای تنظیم منطقه زمانی روی ساعت تهران، از تابع زیر استفاده میکنیم:
date_default_timezone_set('Asia/Tehran');
همچنین با استفاده از تابع date_default_timezone_get() میتوانید منطقه زمانی فعلی سیستم را دریافت کنید.
۲. کار با تابع date() و فرمتهای رایج آن
تابع date() پرکاربردترین تابع برای فرمتدهی تاریخ و زمان در PHP است. این تابع یک فرمت متنی را دریافت کرده و زمان فعلی (یا یک Timestamp مشخص) را بر اساس آن فرمت میکند.
// نمایش تاریخ امروز به صورت: 2023/10/24
echo date("Y/m/d");
// نمایش زمان فعلی به صورت: 15:30:45
echo date("H:i:s");
// ترکیب تاریخ و زمان با منطقه زمانی
echo date("Y-m-d H:i:s");
کاراکترهای فرمتدهی پرکاربرد:
- Y: سال به صورت ۴ رقمی (مثال: 2023)
- m: ماه به صورت ۲ رقمی با صفر پیشفرض (01 تا 12)
- d: روز ماه به صورت ۲ رقمی با صفر پیشفرض (01 تا 31)
- H: ساعت به صورت ۲۴ ساعته با صفر پیشفرض (00 تا 23)
- h: ساعت به صورت ۱۲ ساعته با صفر پیشفرض (01 تا 12)
- i: دقیقه با صفر پیشفرض (00 تا 59)
- s: ثانیه با صفر پیشفرض (00 تا 59)
- A: نمایش حروف بزرگ AM یا PM
۳. مفهوم Timestamp و تابع time()
برچسب زمانی یا Timestamp (مشخصاً Unix Timestamp) تعداد ثانیههای سپری شده از تاریخ ۱ ژانویه ۱۹۷۰ ساعت 00:00:00 UTC است. این عدد مستقل از منطقههای زمانی است و برای ذخیرهسازی زمان در پایگاه داده بسیار مناسب است.
$currentTime = time();
echo $currentTime; // خروجی عددی شبیه به: 1698154245
// تبدیل Timestamp به تاریخ قابل خواندن برای انسان
echo date("Y-m-d H:i:s", $currentTime);
۴. تابع جادویی strtotime()
یکی از جالبترین و کاربردیترین توابع در PHP، تابع strtotime() است. این تابع عبارات متنی انگلیسی مربوط به زمان را گرفته و آنها را به Timestamp تبدیل میکند.
echo strtotime("now"); // زمان فعلی
echo strtotime("tomorrow"); // زمان فردا در همین ساعت
echo strtotime("+3 days"); // سه روز آینده
echo strtotime("next Monday"); // دوشنبه هفته آینده
echo strtotime("last Friday"); // جمعه گذشته
۵. رویکرد شیءگرا: کار با کلاس DateTime
در PHP مدرن (نسخههای ۵.۲ به بعد و به ویژه PHP 7 و PHP 8)، توصیه اکید استفاده از کلاسهای شیءگرا مانند DateTime است. این کلاسها مدیریت تاریخ را بسیار سادهتر، تمیزتر و ایمنتر میکنند.
ساخت شیء DateTime:
// زمان فعلی
$date = new DateTime();
// یک زمان مشخص با منطقه زمانی خاص
$dateCustom = new DateTime('2023-12-25 08:00:00', new DateTimeZone('America/New_York'));
// نمایش فرمتشده
echo $dateCustom->format('Y-m-d H:i:s P');
محاسبات تاریخ با DateTime و DateInterval:
با استفاده از متدهای add و sub و کلاس DateInterval، میتوانید به راحتی به تاریخها اضافه یا از آنها کم کنید.
$date = new DateTime(); // امروز
// اضافه کردن ۱۰ روز به تاریخ فعلی (P = Period, 10D = 10 Days)
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d');
// کم کردن ۲ ماه (P2M = 2 Months)
$date->sub(new DateInterval('P2M'));
echo $date->format('Y-m-d');
محاسبه اختلاف دو تاریخ (Diff):
$date1 = new DateTime('2023-01-01');
$date2 = new DateTime('2023-12-31');
$interval = $date1->diff($date2);
echo $interval->format('%R%a days'); // خروجی: +364 days
نتیجهگیری
استفاده از کلاس DateTime در پروژههای جدید و بزرگ به دلیل پشتیبانی عالی از منطقههای زمانی مختلف و قابلیتهای شیءگرایی بالا پیشنهاد میشود. با این حال، استفاده از توابعی نظیر date() و strtotime() برای کارهای کوچک و سریع کماکان بسیار رایج و کاربردی است.
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید