کار با تاریخ و زمان در PHP یکی از مباحث مهم و کاربردی در توسعه وب است. تقریباً هر پروژه واقعی PHP به نوعی با تاریخ و زمان سروکار دارد؛ از ثبتنام کاربران و تاریخ ایجاد سفارش گرفته تا سیستمهای رزرو، فروشگاه اینترنتی، گزارشگیری، اشتراکها، انقضای سرویس، ارسال Notification و APIها.
PHP ابزارهای مختلفی برای مدیریت تاریخ و زمان در اختیار برنامهنویس قرار میدهد. از تابع ساده date() گرفته تا کلاس قدرتمند DateTime و امکانات مربوط به Timezone، Timestamp و محاسبات زمانی.
در این آموزش یاد میگیریم:
- تاریخ و زمان در PHP چیست؟
- چگونه تاریخ فعلی را دریافت کنیم؟
- چگونه تاریخ را با
date()قالببندی کنیم؟ - Timestamp چیست؟
- چگونه Timestamp را به تاریخ تبدیل کنیم؟
strtotime()چیست؟- چگونه دو تاریخ را با یکدیگر مقایسه کنیم؟
- چگونه به یک تاریخ روز یا ماه اضافه کنیم؟
DateTimeچیست؟DateTimeImmutableچه تفاوتی باDateTimeدارد؟- Timezone در PHP چگونه مدیریت میشود؟
- چگونه تاریخ شمسی را در PHP مدیریت کنیم؟
- چگونه تاریخ و زمان را در Database ذخیره کنیم؟
# تاریخ و زمان در PHP چیست؟
در برنامهنویسی، تاریخ و زمان معمولاً به صورت یک مقدار قابل پردازش ذخیره میشوند.
برای مثال:
$date = "2026-09-08";
یا:
$datetime = "2026-09-08 15:30:00";
این اطلاعات میتوانند برای موارد مختلفی استفاده شوند؛ مانند:
- تاریخ ثبت سفارش
- زمان ورود کاربر
- تاریخ انتشار مقاله
- تاریخ پایان اشتراک
- زمان ایجاد Invoice
- زمان ارسال پیام
- تاریخ انقضای لینک
- زمان اجرای یک Job
بنابراین مدیریت صحیح Date و Time یکی از مهارتهای مهم در PHP است.
# دریافت تاریخ و زمان فعلی در PHP
یکی از سادهترین روشها برای دریافت تاریخ و زمان فعلی استفاده از date() است.
echo date('Y-m-d H:i:s');
خروجی نمونه:
2026-09-08 15:30:45
البته خروجی دقیق به زمان سیستم و Timezone تنظیمشده بستگی دارد.
# تابع date در PHP
تابع date() برای قالببندی تاریخ و زمان استفاده میشود.
ساختار کلی:
date(format, timestamp);
پارامتر اول مشخص میکند تاریخ با چه فرمتی نمایش داده شود.
مثلاً:
echo date('Y-m-d');
خروجی:
2026-09-08
یا:
echo date('H:i:s');
خروجی:
15:30:45
# مهمترین فرمتهای date در PHP
چند Format بسیار پرکاربرد عبارتاند از:
| Format | کاربرد |
|---|---|
Y | سال چهاررقمی |
y | سال دو رقمی |
m | ماه به صورت عددی |
n | ماه بدون صفر ابتدایی |
d | روز ماه با صفر ابتدایی |
j | روز ماه بدون صفر ابتدایی |
H | ساعت 24 ساعته |
h | ساعت 12 ساعته |
i | دقیقه |
s | ثانیه |
A | AM یا PM |
l | نام کامل روز هفته |
D | نام کوتاه روز هفته |
F | نام کامل ماه |
مثلاً:
echo date('l, F j, Y');
میتواند چیزی شبیه این تولید کند:
Tuesday, September 8, 2026
# نمایش تاریخ به فرمت دلخواه
فرض کنید میخواهیم تاریخ به این شکل نمایش داده شود:
2026/09/08
میتوانیم بنویسیم:
echo date('Y/m/d');
یا:
echo date('Y-m-d');
برای نمایش:
08/09/2026
میتوان نوشت:
echo date('d/m/Y');
# دریافت فقط ساعت در PHP
برای دریافت ساعت فعلی:
echo date('H:i');
خروجی:
15:30
برای نمایش ثانیه نیز:
echo date('H:i:s');
# دریافت روز، ماه و سال
میتوان بخشهای مختلف تاریخ را جداگانه دریافت کرد:
$year = date('Y');
$month = date('m');
$day = date('d');
مثلاً:
echo "Year: " . $year;
echo "Month: " . $month;
echo "Day: " . $day;
# Timestamp در PHP چیست؟
Unix Timestamp روشی برای نمایش زمان به صورت تعداد ثانیههای گذشته از یک نقطه مرجع مشخص است.
در PHP میتوان Timestamp فعلی را با time() دریافت کرد:
$timestamp = time();
echo $timestamp;
خروجی چیزی شبیه این خواهد بود:
1788861645
عدد دقیق با توجه به زمان اجرای کد متفاوت است.
# تبدیل Timestamp به تاریخ
میتوان Timestamp را به تاریخ تبدیل کرد:
$timestamp = time();
echo date('Y-m-d H:i:s', $timestamp);
در واقع date() میتواند علاوه بر Format، یک Timestamp نیز دریافت کند.
# تبدیل تاریخ به Timestamp
برای تبدیل یک تاریخ متنی به Timestamp میتوان از strtotime() استفاده کرد:
$timestamp = strtotime('2026-09-08');
echo $timestamp;
سپس:
echo date('Y-m-d', $timestamp);
# تابع strtotime در PHP
strtotime() یکی از توابع کاربردی PHP برای تبدیل یک عبارت متنی مربوط به زمان به Timestamp است.
مثلاً:
echo date('Y-m-d', strtotime('tomorrow'));
یا:
echo date('Y-m-d', strtotime('+7 days'));
همچنین میتوان عباراتی مانند:
next Monday
next month
yesterday
tomorrow
+2 days
-1 week
را در سناریوهای مناسب استفاده کرد.
# محاسبه تاریخ فردا
مثلاً:
$tomorrow = strtotime('+1 day');
echo date('Y-m-d', $tomorrow);
# محاسبه تاریخ یک هفته بعد
$nextWeek = strtotime('+1 week');
echo date('Y-m-d', $nextWeek);
# محاسبه تاریخ یک ماه بعد
$nextMonth = strtotime('+1 month');
echo date('Y-m-d', $nextMonth);
در محاسبات پیچیده تقویمی بهتر است به رفتار ماهها و انتهای ماه توجه ویژه داشته باشید و برای پروژههای جدی از APIهای شیءمحور DateTime استفاده کنید.
# DateTime در PHP چیست؟
برای کار حرفهایتر با تاریخ و زمان، PHP کلاس DateTime را در اختیار ما قرار میدهد.
مثلاً:
$date = new DateTime();
echo $date->format('Y-m-d H:i:s');
این روش در پروژههای بزرگتر معمولاً انعطافپذیری بیشتری نسبت به استفاده صرف از date() دارد.
# ایجاد یک تاریخ مشخص با DateTime
میتوان تاریخ مشخصی ایجاد کرد:
$date = new DateTime('2026-09-08');
echo $date->format('Y-m-d');
یا:
$date = new DateTime('2026-09-08 15:30:00');
echo $date->format('Y-m-d H:i:s');
# قالببندی DateTime با format
برای تبدیل DateTime به String میتوان از format() استفاده کرد:
$date = new DateTime();
echo $date->format('Y/m/d');
یا:
echo $date->format('d-m-Y H:i:s');
# تغییر تاریخ با modify
یکی از امکانات کاربردی DateTime، متد modify() است.
مثلاً:
$date = new DateTime();
$date->modify('+7 days');
echo $date->format('Y-m-d');
یا:
$date->modify('-2 days');
همچنین:
$date->modify('+1 month');
و:
$date->modify('+1 year');
# افزودن روز، ماه یا سال با DateInterval
برای محاسبات ساختاریافتهتر میتوان از DateInterval استفاده کرد.
مثلاً افزودن ۱۰ روز:
$date = new DateTime();
$interval = new DateInterval('P10D');
$date->add($interval);
echo $date->format('Y-m-d');
در اینجا:
P10D
به معنی یک Period شامل ۱۰ روز است.
# کم کردن زمان با DateInterval
مثلاً برای کم کردن ۵ روز:
$date = new DateTime();
$interval = new DateInterval('P5D');
$date->sub($interval);
echo $date->format('Y-m-d');
# تفاوت DateTime و DateTimeImmutable
در PHP علاوه بر DateTime، کلاس DateTimeImmutable نیز وجود دارد.
در DateTime عملیاتهایی مانند modify() میتوانند همان Object را تغییر دهند:
$date = new DateTime('2026-09-08');
$date->modify('+1 day');
اما DateTimeImmutable در عملیات تغییر، یک Object جدید برمیگرداند:
$date = new DateTimeImmutable('2026-09-08');
$newDate = $date->modify('+1 day');
بنابراین مقدار اولیه $date بدون تغییر باقی میماند.
در کدهایی که جلوگیری از تغییر ناخواسته Object اهمیت دارد، DateTimeImmutable میتواند انتخاب مناسبی باشد.
# مقایسه دو تاریخ در PHP
یکی از نیازهای رایج این است که بفهمیم یک تاریخ قبل یا بعد از تاریخ دیگری قرار دارد.
با DateTime میتوان این کار را انجام داد:
$date1 = new DateTime('2026-09-01');
$date2 = new DateTime('2026-09-10');
if ($date1 < $date2) {
echo 'date1 قبل از date2 است';
}
این روش خوانا و مناسب است.
# محاسبه اختلاف دو تاریخ با diff
برای محاسبه اختلاف بین دو تاریخ میتوان از diff() استفاده کرد.
$start = new DateTime('2026-09-01');
$end = new DateTime('2026-09-10');
$diff = $start->diff($end);
echo $diff->days;
خروجی:
9
# محاسبه تعداد روزهای باقیمانده
فرض کنید اشتراک کاربر تا تاریخ مشخصی اعتبار دارد:
$today = new DateTime();
$expireDate = new DateTime('2026-10-01');
$diff = $today->diff($expireDate);
echo $diff->days;
در یک سیستم اشتراک واقعی باید علاوه بر تعداد روز، به این موضوع نیز توجه کرد که تاریخ گذشته است یا آینده.
# بررسی منقضی شدن یک تاریخ
مثلاً:
$expireDate = new DateTime('2026-08-01');
$today = new DateTime();
if ($expireDate < $today) {
echo 'اشتراک منقضی شده است';
}
این الگو در سیستمهای:
- اشتراک
- سرویسهای SaaS
- لایسنس
- تخفیف
- رزرو
- لینکهای موقت
کاربرد زیادی دارد.
# Timezone در PHP چیست؟
Timezone مشخص میکند تاریخ و زمان بر اساس کدام منطقه زمانی محاسبه شود.
این موضوع برای برنامههایی که روی Server اجرا میشوند بسیار مهم است.
برای مثال Server ممکن است روی UTC تنظیم شده باشد، در حالی که کاربران شما در منطقه زمانی دیگری قرار داشته باشند.
# مشاهده Timezone فعلی
میتوان Timezone فعلی PHP را بررسی کرد:
echo date_default_timezone_get();
# تنظیم Timezone در PHP
برای تنظیم Timezone:
date_default_timezone_set('Asia/Tehran');
سپس:
echo date('Y-m-d H:i:s');
زمان بر اساس Timezone انتخابشده نمایش داده میشود.
# استفاده از Timezone با DateTime
روش بهتر این است که در صورت نیاز Timezone را به خود DateTime بدهیم:
$timezone = new DateTimeZone('Asia/Tehran');
$date = new DateTime('now', $timezone);
echo $date->format('Y-m-d H:i:s');
این روش در کدهایی که با چند منطقه زمانی سروکار دارند، کنترل بیشتری ایجاد میکند.
# تبدیل Timezone
فرض کنید یک DateTime با Timezone مشخص داریم:
$date = new DateTime(
'2026-09-08 12:00:00',
new DateTimeZone('UTC')
);
میتوانیم آن را به Timezone دیگری تبدیل کنیم:
$date->setTimezone(
new DateTimeZone('Asia/Tehran')
);
echo $date->format('Y-m-d H:i:s');
نکته مهم این است که تغییر Timezone با تغییر خود لحظه زمانی یکی نیست؛ شما همان لحظه را در منطقه زمانی دیگری نمایش میدهید.
# UTC یا Timezone محلی؛ کدام بهتر است؟
در بسیاری از سیستمهای حرفهای، مخصوصاً سیستمهایی که کاربران یا Serverهای آنها در مناطق مختلف هستند، ذخیرهسازی زمان به صورت UTC و تبدیل آن هنگام نمایش، رویکرد مناسبی است.
مثلاً:
Database
↓
UTC
↓
Application
↓
User Timezone
↓
Display
این روش از ایجاد بسیاری از مشکلات مربوط به تفاوت منطقه زمانی جلوگیری میکند.
# ذخیره تاریخ و زمان در MySQL
در MySQL معمولاً برای دادههای زمانی از انواعی مانند:
DATE
DATETIME
TIMESTAMP
استفاده میشود.
مثلاً:
created_at DATETIME
در PHP میتوان مقدار مناسب تولید کرد:
$date = new DateTime();
$createdAt = $date->format('Y-m-d H:i:s');
سپس آن را با Prepared Statement در Database ذخیره کرد.
# ذخیره تاریخ و زمان در PostgreSQL
در PostgreSQL نیز انواع زمانی مختلفی وجود دارد، از جمله:
date
timestamp
timestamp with time zone
انتخاب نوع مناسب به نیاز پروژه بستگی دارد.
در پروژههای حرفهای باید قبل از انتخاب نوع ستون، نحوه مدیریت Timezone در کل Application مشخص شود.
# تاریخ و زمان در Laravel
اگر با Laravel کار میکنید، مدیریت تاریخ و زمان اهمیت بیشتری پیدا میکند؛ زیرا Modelها، Database، Queueها، Notificationها، Jobها و Schedulerها همگی میتوانند با زمان سروکار داشته باشند.
برای مثال یک فیلد:
created_at
معمولاً نشاندهنده زمان ایجاد یک Record است.
در Laravel همچنین Carbon ابزار بسیار مهمی برای کار با تاریخ و زمان است.
مثلاً:
use Carbon\Carbon;
$date = Carbon::now();
echo $date->format('Y-m-d');
برای آموزش کامل Carbon میتوان یک مقاله مستقل در Cluster Laravel ایجاد کرد تا این مقاله PHP با آن مقاله لینک داخلی داشته باشد.
# تاریخ شمسی در PHP
در بسیاری از پروژههای ایرانی نیاز داریم تاریخ میلادی را به تاریخ شمسی تبدیل کنیم.
برای مثال:
2026-09-08
ممکن است در رابط کاربری به شکل تاریخ شمسی نمایش داده شود.
نکته مهم این است که Gregorian Date و Persian/Jalali Calendar دو مفهوم متفاوت هستند.
بهتر است در Backend، منطق ذخیرهسازی تاریخ را با یک استاندارد مشخص انجام دهید و تبدیل به تقویم شمسی را در لایه مناسب انجام دهید.
برای پروژههای ایرانی معمولاً میتوان از کتابخانههای معتبر مربوط به تقویم جلالی استفاده کرد.
# چرا نباید تاریخ شمسی را به صورت String ساده ذخیره کنیم؟
فرض کنید تاریخ را به صورت:
1405/06/17
در Database ذخیره کنیم.
ممکن است در آینده برای:
- مرتبسازی
- مقایسه
- محاسبه اختلاف
- افزودن روز
- افزودن ماه
- گزارشگیری
با مشکل مواجه شویم.
به همین دلیل بهتر است تاریخ واقعی را با نوع داده مناسب و یک استاندارد مشخص ذخیره کنیم و فقط در زمان نمایش آن را به فرمت موردنظر کاربر تبدیل کنیم.
# تبدیل تاریخ برای نمایش به کاربر
یکی از اصول خوب در طراحی Application این است که:
فرمت ذخیرهسازی را از فرمت نمایش جدا کنیم.
مثلاً Database:
2026-09-08 15:30:00
و در Frontend:
17 شهریور 1405، ساعت 15:30
این دو مقدار میتوانند نمایشهای مختلفی از یک زمان باشند.
# مثال واقعی: محاسبه زمان پایان اشتراک
فرض کنید کاربر یک سرویس ۳۰ روزه خریداری کرده است.
$startDate = new DateTime('2026-09-08');
$endDate = clone $startDate;
$endDate->modify('+30 days');
echo $endDate->format('Y-m-d');
در اینجا تاریخ پایان سرویس بر اساس تاریخ شروع محاسبه میشود.
در سیستمهای واقعی اشتراک بهتر است علاوه بر تاریخ، ساعت، Timezone و قوانین تمدید نیز به صورت دقیق مشخص شوند.
# مثال واقعی: بررسی انقضای لینک
فرض کنید لینکی داریم که تا ۲ ساعت معتبر است:
$createdAt = new DateTime();
$expireAt = clone $createdAt;
$expireAt->modify('+2 hours');
$now = new DateTime();
if ($now > $expireAt) {
echo 'لینک منقضی شده است';
} else {
echo 'لینک معتبر است';
}
این منطق در:
- لینک بازیابی رمز عبور
- لینک دانلود
- لینک تأیید ایمیل
- Tokenهای موقت
کاربرد دارد.
# مثال واقعی: نمایش زمان گذشته
گاهی به جای نمایش تاریخ دقیق میخواهیم چیزی مانند:
5 دقیقه پیش
یا:
3 روز پیش
نمایش دهیم.
برای این کار باید اختلاف زمان فعلی و زمان ثبت داده محاسبه شود.
یک پیادهسازی ساده:
$createdAt = new DateTime('2026-09-08 12:00:00');
$now = new DateTime();
$diff = $createdAt->diff($now);
echo $diff->days . ' روز گذشته است.';
در پروژه واقعی میتوان منطق کاملتری برای نمایش ثانیه، دقیقه، ساعت، روز، ماه و سال ایجاد کرد.
# اشتباهات رایج در کار با تاریخ و زمان PHP
۱. استفاده نادرست از Timezone
اگر Timezone را مشخص نکنید، ممکن است زمان نمایش دادهشده با زمان مورد انتظار شما متفاوت باشد.
۲. ذخیره تاریخ به صورت String نامناسب
تاریخ را فقط برای راحتی به صورت String تصادفی ذخیره نکنید.
۳. مقایسه Stringهای تاریخ بدون توجه به Format
مقایسه رشتهای فقط در شرایط خاص و با Format مناسب قابل اتکا است. برای منطق جدی بهتر است از DateTime استفاده شود.
۴. نادیده گرفتن UTC
در Applicationهای چندمنطقهای بهتر است استراتژی Timezone از ابتدا مشخص شود.
۵. بیتوجهی به متن فارسی
نمایش تاریخ میلادی و تاریخ شمسی دو موضوع متفاوت هستند و نباید آنها را با هم ترکیب کرد.
۶. انجام محاسبات پیچیده فقط با Timestamp
Timestamp برای بسیاری از عملیاتها مناسب است، اما برای منطق پیچیده تقویمی، APIهای DateTime خواناتر و قابلکنترلتر هستند.
# بهترین روش برای کار با تاریخ و زمان در PHP چیست؟
برای پروژههای ساده، توابعی مانند:
date()
time()
strtotime()
کاملاً کاربردی هستند.
اما زمانی که پروژه شما شامل:
- محاسبات تاریخ
- چند Timezone
- تاریخ شروع و پایان
- اشتراک
- رزرو
- گزارشگیری
- تاریخ انقضا
- محاسبات پیچیده زمانی
باشد، استفاده از APIهای شیءمحور مانند:
DateTime
DateTimeImmutable
DateTimeZone
DateInterval
معمولاً انتخاب حرفهایتری است.
# خلاصه مهمترین توابع و کلاسهای تاریخ و زمان در PHP
| ابزار | کاربرد |
|---|---|
date() | قالببندی تاریخ و زمان |
time() | دریافت Unix Timestamp فعلی |
strtotime() | تبدیل عبارت زمانی به Timestamp |
DateTime | مدیریت شیءمحور تاریخ و زمان |
DateTimeImmutable | مدیریت تغییرناپذیر تاریخ و زمان |
DateTimeZone | مدیریت Timezone |
DateInterval | ایجاد بازه زمانی |
diff() | محاسبه اختلاف دو تاریخ |
format() | قالببندی DateTime |
modify() | تغییر تاریخ و زمان |
setTimezone() | تغییر Timezone نمایش زمان |
# جمعبندی
مدیریت تاریخ و زمان در PHP یکی از مهارتهای ضروری برای توسعهدهندگان PHP است.
در این مقاله با مفاهیم مهمی مانند:
date()time()- Unix Timestamp
strtotime()DateTimeDateTimeImmutableDateIntervalDateTimeZonediff()- Timezone
- UTC
- تاریخ شمسی
- ذخیره تاریخ در MySQL و PostgreSQL
آشنا شدیم.
اگر در ابتدای مسیر یادگیری PHP هستید، ابتدا استفاده از date()، time() و strtotime() را به خوبی یاد بگیرید. سپس برای پروژههای واقعی سراغ DateTime و DateTimeImmutable بروید.
اگر قصد دارید به صورت حرفهای وارد توسعه وب شوید، مدیریت تاریخ و زمان تنها یکی از مهارتهای موردنیاز شماست. در ادامه مسیر، یادگیری JSON در PHP اهمیت زیادی دارد؛ زیرا JSON یکی از قالبهای اصلی تبادل داده در APIها و Applicationهای مدرن وب است.
# سوالات متداول
چگونه تاریخ امروز را در PHP نمایش دهیم؟
میتوانید از date() استفاده کنید:
echo date('Y-m-d');
چگونه ساعت فعلی را در PHP دریافت کنیم؟
echo date('H:i:s');
Timestamp در PHP چیست؟
Unix Timestamp نمایش یک لحظه زمانی به صورت تعداد ثانیههای گذشته از Unix Epoch است.
چگونه Timestamp را به تاریخ تبدیل کنیم؟
با date():
echo date('Y-m-d', $timestamp);
strtotime در PHP چیست؟
strtotime() یک عبارت متنی مربوط به تاریخ یا زمان را به Timestamp تبدیل میکند.
DateTime در PHP چیست؟
DateTime یک کلاس داخلی PHP برای ایجاد، تغییر، مقایسه و قالببندی تاریخ و زمان است.
تفاوت DateTime و DateTimeImmutable چیست؟
DateTime قابل تغییر است، اما DateTimeImmutable در عملیات تغییر، یک Object جدید ایجاد میکند و Object اولیه را تغییر نمیدهد.
چگونه Timezone را در PHP تنظیم کنیم؟
میتوانید Timezone پیشفرض PHP را تنظیم کنید:
date_default_timezone_set('Asia/Tehran');
یا Timezone را مستقیماً هنگام ایجاد DateTime مشخص کنید.
چگونه اختلاف دو تاریخ را در PHP محاسبه کنیم؟
با diff():
$diff = $date1->diff($date2);
آیا میتوان تاریخ شمسی را در PHP استفاده کرد؟
بله. برای نمایش و محاسبات تقویم جلالی میتوان از کتابخانههای مناسب استفاده کرد، اما بهتر است روش ذخیرهسازی و منطق داخلی تاریخ از فرمت نمایش شمسی جدا باشد.
# مقالات مرتبط
برای ادامه مسیر یادگیری PHP، مقالات زیر نیز پیشنهاد میشوند:
- PHP چیست و چه کاربردی دارد؟
- آموزش PHP از صفر
- متغیرها در PHP
- انواع داده در PHP
- آرایهها در PHP
- رشتهها در PHP
- کار با JSON در PHP
- کار با فایل در PHP
- Exception در PHP
- Namespace در PHP
- Composer چیست؟
- آموزش OOP در PHP
- PHP و MySQL
- REST API با PHP





