یک بار برای همیشه date رو یاد بگیر

[short_link]

تابع `date` در PHP یکی از پرکاربردترین توابع برای نمایش و مدیریت تاریخ و زمان است. این تابع با استفاده از فرمت‌های مختلف، تاریخ و زمان را به صورت قابل خواندن نمایش می‌دهد.

1. فرمت‌های مختلف تابع `date`
تابع `date` دو آرگومان می‌گیرد:
1. فرمت تاریخ (الزامی)
2. مهر زمانی (اختیاری، پیش‌فرض زمان فعلی)

فرمت‌های پرکاربرد:
| کد فرمت | توضیح | مثال خروجی |
|-|-|-|
| `Y` | سال کامل (4 رقم) | `2025` |
| `y` | سال کوتاه (2 رقم) | `25` |
| `m` | ماه (2 رقم) | `01` |
| `n` | ماه (بدون صفر اضافی) | `1` |
| `d` | روز ماه (2 رقم) | `21` |
| `j` | روز ماه (بدون صفر اضافی) | `21` |
| `l` | نام کامل روز | `Monday` |
| `D` | نام کوتاه روز | `Mon` |
| `H` | ساعت (24 ساعته) | `14` |
| `h` | ساعت (12 ساعته) | `02` |
| `i` | دقیقه | `45` |
| `s` | ثانیه | `30` |
| `a` | زمان (صبح یا عصر) | `am` یا `pm` |
| `A` | زمان (صبح یا عصر – حروف بزرگ) | `AM` یا `PM` |

2. مثال‌های ساده با تابع `date`

# مثال 1: نمایش تاریخ کامل

<?php
echo date("Y-m-d"); // خروجی: 2025-01-21
?>

# مثال 2: نمایش زمان

<?php
echo date("H:i:s"); // خروجی: 14:45:30
?>

# مثال 3: نمایش روز هفته

<?php
echo date("l"); // خروجی: Monday
?>

# مثال 4: نمایش ترکیبی تاریخ و زمان

<?php
echo date("Y-m-d H:i:s"); // خروجی: 2025-01-21 14:45:30
?>

3. مدیریت تاریخ با تایم‌استمپ (Timestamp)

مفهوم تایم‌استمپ
– تایم‌استمپ تعداد ثانیه‌هایی است که از تاریخ 1 ژانویه 1970 ساعت 00:00:00 UTC گذشته است.
– از تابع `time()` برای دریافت تایم‌استمپ فعلی استفاده می‌شود.

# مثال:

<?php
echo time(); // خروجی: 1737495930
?>

تبدیل تایم‌استمپ به تاریخ

<?php
$timestamp = 1737495930;
echo date("Y-m-d H:i:s", $timestamp); // خروجی: 2025-01-21 14:45:30
?>

ایجاد تایم‌استمپ از یک تاریخ خاص
با استفاده از `mktime` می‌توان تایم‌استمپ برای یک تاریخ خاص ایجاد کرد.

<?php
$timestamp = mktime(14, 45, 30, 1, 21, 2025);
echo date("Y-m-d H:i:s", $timestamp); // خروجی: 2025-01-21 14:45:30
?>

4. کار با زمان و تاریخ در منطقه‌های زمانی مختلف

تنظیم منطقه زمانی
از تابع `date_default_timezone_set` برای تنظیم منطقه زمانی استفاده می‌شود.

<?php
date_default_timezone_set("Asia/Tehran");
echo date("Y-m-d H:i:s"); // خروجی: تاریخ و زمان ایران
?>

5. تبدیل تاریخ‌ها

تبدیل تاریخ میلادی به شمسی
برای این کار از کتابخانه‌هایی مانند `jdf` یا `IntlDateFormatter` استفاده می‌شود.

# مثال با `IntlDateFormatter`:

<?php
$formatter = new IntlDateFormatter("fa_IR@calendar=persian", IntlDateFormatter::FULL, IntlDateFormatter::FULL);
$formatter->setPattern("yyyy/MM/dd");
echo $formatter->format(time()); // خروجی: تاریخ شمسی
?>

6. مثال‌های پیشرفته و پیچیده

محاسبه اختلاف بین دو تاریخ

<?php
$date1 = new DateTime("2025-01-01");
$date2 = new DateTime("2025-12-31");
$interval = $date1->diff($date2);

echo "Difference: " . $interval->days . " days"; // خروجی: Difference: 364 days
?>

نمایش تقویم ماه

<?php
$month = date("m");
$year = date("Y");
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);

echo "Calendar for $month/$year:<br>";

for ($day = 1; $day <= $daysInMonth; $day++) {
    $date = mktime(0, 0, 0, $month, $day, $year);
    echo date("l, Y-m-d", $date) . "<br>";
}
?>

بررسی روزهای تعطیل

<?php
$holidays = [
    "2025-01-01",
    "2025-03-21",
    "2025-12-25"
];

for ($i = 0; $i < 365; $i++) {
    $date = date("Y-m-d", strtotime("+$i days", strtotime("2025-01-01")));
    if (in_array($date, $holidays)) {
        echo "$date is a holiday<br>";
    }
}
?>

ایجاد تایمر شمارش معکوس

<?php
$eventDate = new DateTime("2025-12-31 23:59:59");
$now = new DateTime();
$interval = $now->diff($eventDate);

echo "Time left: " . $interval->format("%a days, %h hours, %i minutes, %s seconds");
?>

محاسبه سن از تاریخ تولد

<?php
$birthDate = new DateTime("1990-05-15");
$now = new DateTime();
$age = $now->diff($birthDate);

echo "Your age: " . $age->y . " years, " . $age->m . " months, and " . $age->d . " days.";
?>

ایجاد گزارش روزانه با حلقه و تاریخ

<?php
$start = new DateTime("2025-01-01");
$end = new DateTime("2025-01-07");

while ($start <= $end) {
    echo "Report for: " . $start->format("Y-m-d") . "<br>";
    $start->modify("+1 day");
}
?>

این مثال‌ها تمام قابلیت‌های تابع `date` و کار با تاریخ و زمان در PHP را پوشش می‌دهند.

در زبان PHP، تابع `date()` برای فرمت‌بندی تاریخ و زمان استفاده می‌شود. این تابع می‌تواند تاریخ و زمان را به فرمت‌های مختلف نمایش دهد و می‌تواند به‌طور پیشرفته برای انجام محاسبات زمانی، نمایش تاریخ‌ها به زبان‌های مختلف و موارد دیگر استفاده شود.

در اینجا چند مثال پیشرفته از استفاده از تابع `date()` در PHP آورده شده است:

1. نمایش تاریخ به صورت کامل (Full Date)

<?php
echo date('l, F j, Y');
?>

توضیح:
– `l`: نام کامل روز هفته (مثل “Monday”)
– `F`: نام کامل ماه (مثل “January”)
– `j`: روز ماه (بدون صفر اولیه، مثل “21”)
– `Y`: سال کامل (مثل “2025”)

خروجی:

Monday, January 21, 2025

2. فرمت‌دهی تاریخ و زمان به صورت 24 ساعته

<?php
echo date('Y-m-d H:i:s');
?>

توضیح:
– `Y`: سال کامل (مثل “2025”)
– `m`: ماه با دو رقم (مثل “01”)
– `d`: روز ماه با دو رقم (مثل “21”)
– `H`: ساعت (فرمت 24 ساعته، مثل “14”)
– `i`: دقیقه (مثل “30”)
– `s`: ثانیه (مثل “15”)

خروجی:

2025-01-21 14:30:15

3. تاریخ فعلی به همراه زمان محلی در منطقه زمانی خاص

<?php
date_default_timezone_set('America/New_York');
echo date('Y-m-d H:i:s');
?>

توضیح:
– با استفاده از `date_default_timezone_set()` می‌توان منطقه زمانی را تنظیم کرد.
– سپس با استفاده از `date()` تاریخ و زمان را در آن منطقه زمانی نمایش می‌دهیم.

خروجی (بسته به منطقه زمانی):

2025-01-21 06:30:15

4. تاریخ 7 روز قبل از امروز

<?php
echo date('Y-m-d', strtotime('-7 days'));
?>

توضیح:
– تابع `strtotime()` به شما این امکان را می‌دهد که تاریخ را به راحتی تغییر دهید.
– `’-7 days’`: 7 روز از تاریخ فعلی کم می‌کند.

خروجی:

2025-01-14

5. نمایش تاریخ به زبان فارسی با استفاده از تابع `date()`

<?php
setlocale(LC_TIME, 'fa_IR');
echo strftime('%A, %d %B %Y');
?>

توضیح:
– `setlocale()` برای تنظیم زبان و منطقه جغرافیایی است.
– `strftime()` برای نمایش تاریخ با فرمت دلخواه است.
– `%A`: نام کامل روز هفته (مثل “دوشنبه”)
– `%d`: روز ماه (مثل “21”)
– `%B`: نام کامل ماه (مثل “ژانویه”)
– `%Y`: سال کامل (مثل “2025”)

خروجی (با فرض پشتیبانی از زبان فارسی):

دوشنبه، ۲۱ ژانویه ۲۰۲۵

6. تاریخ و زمان به صورت فاصله زمانی از تاریخ مشخص

<?php
$datetime1 = new DateTime("2025-01-01");
$datetime2 = new DateTime("2025-01-21");
$interval = $datetime1->diff($datetime2);
echo $interval->format('%d روز %h ساعت %i دقیقه');
?>

توضیح:
– در اینجا از کلاس `DateTime` برای مقایسه دو تاریخ استفاده می‌کنیم.
– متد `diff()` تفاوت زمانی بین دو تاریخ را محاسبه می‌کند.
– سپس از متد `format()` برای نمایش تفاوت به فرمت دلخواه استفاده می‌شود.

خروجی:

20 روز 0 ساعت 0 دقیقه

7. نمایش تاریخ و زمان در فرمت UNIX Timestamp

<?php
echo time();
?>

توضیح:
– تابع `time()` زمان جاری را به صورت UNIX Timestamp برمی‌گرداند که تعداد ثانیه‌ها از تاریخ 1 ژانویه 1970 تا زمان فعلی است.

خروجی:

1738469457

8. نمایش تاریخ با فرمت 12 ساعته و AM/PM

<?php
echo date('h:i A');
?>

توضیح:
– `h`: ساعت در فرمت 12 ساعته (مثل “02”)
– `i`: دقیقه (مثل “30”)
– `A`: AM یا PM (مثل “PM”)

خروجی:

02:30 PM

این مثال‌ها نشان می‌دهند که چطور می‌توان از تابع `date()` در PHP به صورت پیچیده‌تر استفاده کرد. با استفاده از ترکیب توابع مختلف و تنظیمات منطقه‌ای، می‌توانید تاریخ‌ها و زمان‌ها را به شیوه‌های متنوعی نمایش دهید.

در اینجا چند مثال پیچیده‌تر از استفاده‌های تابع `date()` در PHP آورده شده است که شامل ترکیب توابع مختلف و استفاده از کلاس‌ها و متدهای پیشرفته‌تر است:

1. محاسبه و نمایش تفاوت زمانی بین دو تاریخ با فرمت سفارشی

فرض کنید می‌خواهید تفاوت زمانی بین دو تاریخ خاص را در قالب روز، ساعت، دقیقه، ثانیه، و همچنین نمایش آن به صورت فرمت فارسی (با توجه به منطقه جغرافیایی) نشان دهید.

<?php
setlocale(LC_TIME, 'fa_IR');
$startDate = new DateTime("2025-01-01 10:00:00");
$endDate = new DateTime("2025-01-21 15:30:45");

$interval = $startDate->diff($endDate);

echo strftime("تفاوت زمانی بین دو تاریخ: %d روز %h ساعت %i دقیقه %s ثانیه");
?>

توضیح:
– با استفاده از کلاس `DateTime` می‌توان تاریخ‌ها را مشخص کرد.
– متد `diff()` برای محاسبه تفاوت زمانی استفاده می‌شود.
– با استفاده از `strftime()` تاریخ به زبان فارسی فرمت می‌شود.

خروجی (فرض بر پشتیبانی از زبان فارسی):

تفاوت زمانی بین دو تاریخ: 20 روز 5 ساعت 30 دقیقه 45 ثانیه

2. محاسبه تاریخ و زمان یک ماه بعد از تاریخ خاص و نمایش آن در فرمت خاص

<?php
$date = new DateTime("2025-01-01 10:00:00");
$date->modify("+1 month");

echo $date->format('l, d F Y H:i:s');
?>

توضیح:
– `DateTime` برای تنظیم تاریخ اولیه استفاده می‌شود.
– متد `modify()` تاریخ را به مدت یک ماه افزایش می‌دهد.
– سپس از متد `format()` برای نمایش تاریخ به صورت فرمت دلخواه استفاده می‌شود.

خروجی:

Thursday, 01 February 2025 10:00:00

3. تاریخ میلادی و تاریخ هجری شمسی به صورت همزمان

در این مثال، تاریخ میلادی را با استفاده از تابع `date()` و تاریخ هجری شمسی را با استفاده از یک تابع جانبی که تاریخ را به هجری شمسی تبدیل می‌کند، نمایش می‌دهیم.

<?php
function gregorianToPersian($date) {
    $gregorianDate = new DateTime($date);
    $gregorianTimestamp = $gregorianDate->getTimestamp();
    $persianDate = jdate("Y-m-d", $gregorianTimestamp);
    return $persianDate;
}

echo "تاریخ میلادی: " . date('Y-m-d') . "<br>";
echo "تاریخ هجری شمسی: " . gregorianToPersian(date('Y-m-d'));
?>

توضیح:
– تابع `gregorianToPersian()` تاریخ میلادی را به تاریخ هجری شمسی تبدیل می‌کند.
– `jdate()` از کتابخانه‌های خاص برای تبدیل تاریخ میلادی به هجری شمسی استفاده می‌کند.
– تاریخ میلادی و هجری شمسی به صورت همزمان نمایش داده می‌شود.

خروجی:

تاریخ میلادی: 2025-01-21
تاریخ هجری شمسی: 1403-11-01

4. محاسبه تاریخ آینده با افزودن تعداد روزهای خاص و نمایش آن به فرمت‌های مختلف

فرض کنید می‌خواهید 45 روز به تاریخ جاری اضافه کنید و سپس تاریخ جدید را به فرمت‌های مختلف نشان دهید.

<?php
$currentDate = new DateTime();
$currentDate->modify("+45 days");

echo "تاریخ 45 روز بعد به فرمت 'Y-m-d': " . $currentDate->format('Y-m-d') . "<br>";
echo "تاریخ 45 روز بعد به فرمت 'l, F j, Y': " . $currentDate->format('l, F j, Y') . "<br>";
echo "تاریخ 45 روز بعد به فرمت 'h:i A': " . $currentDate->format('h:i A') . "<br>";
?>

توضیح:
– از متد `modify()` برای افزودن 45 روز به تاریخ جاری استفاده می‌شود.
– تاریخ جدید در فرمت‌های مختلف (شامل تاریخ و زمان) نمایش داده می‌شود.

خروجی:

تاریخ 45 روز بعد به فرمت ‘Y-m-d’: 2025-03-07
تاریخ 45 روز بعد به فرمت ‘l, F j, Y’: Saturday, March 7, 2025
تاریخ 45 روز بعد به فرمت ‘h:i A’: 02:30 PM

5. محاسبه تاریخ دقیق در یک سال و 90 روز بعد از تاریخ مشخص و نمایش آن در فرمت‌های مختلف

<?php
$startDate = new DateTime("2025-01-01");
$startDate->modify("+1 year +90 days");

echo "تاریخ یک سال و 90 روز بعد: " . $startDate->format('Y-m-d H:i:s') . "<br>";
echo "تاریخ یک سال و 90 روز بعد به فرمت 'l, d F Y': " . $startDate->format('l, d F Y') . "<br>";
?>

توضیح:
– از `modify()` برای افزودن یک سال و 90 روز به تاریخ شروع استفاده می‌شود.
– تاریخ جدید در فرمت‌های مختلف (شامل تاریخ و زمان) نمایش داده می‌شود.

خروجی:

تاریخ یک سال و 90 روز بعد: 2026-04-01 00:00:00
تاریخ یک سال و 90 روز بعد به فرمت ‘l, d F Y’: Wednesday, 01 April 2026

6. تبدیل تاریخ میلادی به فرمت Unix Timestamp و بازگشت به تاریخ به صورت دقیق

<?php
$date = new DateTime("2025-01-01 10:00:00");
$timestamp = $date->getTimestamp();

echo "تاریخ به صورت Unix Timestamp: " . $timestamp . "<br>";

$newDate = new DateTime();
$newDate->setTimestamp($timestamp);
echo "تاریخ بازگشتی از Unix Timestamp: " . $newDate->format('Y-m-d H:i:s');
?>

توضیح:
– تاریخ میلادی به Unix Timestamp تبدیل می‌شود.
– سپس با استفاده از `setTimestamp()` می‌توان تاریخ را از Unix Timestamp بازگرداند و آن را در فرمت دلخواه نمایش داد.

خروجی:

تاریخ به صورت Unix Timestamp: 1738467600
تاریخ بازگشتی از Unix Timestamp: 2025-01-01 10:00:00

این مثال‌ها ترکیب پیچیده‌تری از توابع `date()` و کلاس `DateTime` در PHP را نشان می‌دهند. این روش‌ها به شما این امکان را می‌دهند که با تاریخ‌ها و زمان‌ها به شکلی انعطاف‌پذیرتر و پیچیده‌تر کار کنید.

در اینجا چند مثال پیچیده‌تر و پیشرفته‌تر از استفاده‌های تابع `date()` و کلاس `DateTime` در PHP آورده شده است که شامل ترکیب‌های پیشرفته، استفاده از تایم‌زون‌ها، پردازش زمان‌های گمشده و محاسبات زمانی پیچیده‌تر است.

1. محاسبه تفاوت زمانی بین دو تاریخ با در نظر گرفتن مناطق زمانی مختلف و نمایش به فرمت‌های مختلف

در این مثال، تاریخ‌ها از دو منطقه زمانی مختلف گرفته می‌شوند و سپس تفاوت زمانی بین آن‌ها محاسبه می‌شود. نتیجه نهایی در فرمت‌های مختلف به نمایش در می‌آید.

<?php
// تنظیم منطقه زمانی اول (نیویورک)
$timezone1 = new DateTimeZone('America/New_York');
$date1 = new DateTime('2025-01-01 10:00:00', $timezone1);

// تنظیم منطقه زمانی دوم (تهران)
$timezone2 = new DateTimeZone('Asia/Tehran');
$date2 = new DateTime('2025-01-01 10:00:00', $timezone2);

// محاسبه تفاوت زمانی
$interval = $date1->diff($date2);

// نمایش تفاوت زمانی به فرمت‌های مختلف
echo "تفاوت زمانی: " . $interval->format('%d روز %h ساعت %i دقیقه %s ثانیه') . "<br>";
echo "تاریخ در نیویورک: " . $date1->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ در تهران: " . $date2->format('l, d F Y H:i:s') . "<br>";
?>

توضیح:
– ابتدا مناطق زمانی مختلف (نیویورک و تهران) با استفاده از `DateTimeZone` تنظیم می‌شوند.
– سپس با استفاده از `diff()` تفاوت زمانی بین دو تاریخ محاسبه می‌شود.
– نتیجه تفاوت زمانی و تاریخ‌ها به فرمت‌های مختلف نمایش داده می‌شود.

خروجی:

تفاوت زمانی: 0 روز 5 ساعت 30 دقیقه 0 ثانیه
تاریخ در نیویورک: Wednesday, 01 January 2025 10:00:00
تاریخ در تهران: Wednesday, 01 January 2025 15:30:00

2. تبدیل تاریخ میلادی به تاریخ هجری شمسی و تاریخ هجری قمری به تاریخ میلادی به صورت پیشرفته

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

<?php
// تبدیل تاریخ میلادی به هجری شمسی
function gregorianToPersian($date) {
    $gregorianDate = new DateTime($date);
    $gregorianTimestamp = $gregorianDate->getTimestamp();
    return jdate("Y-m-d", $gregorianTimestamp);
}

// تبدیل تاریخ هجری قمری به میلادی
function hijriToGregorian($date) {
    $hijriDate = DateTime::createFromFormat('Y-m-d', $date);
    return $hijriDate->format('Y-m-d');
}

$persianDate = gregorianToPersian("2025-01-01");
$gregorianDate = hijriToGregorian("1446-05-01");

echo "تاریخ میلادی 2025-01-01 به هجری شمسی: " . $persianDate . "<br>";
echo "تاریخ هجری قمری 1446-05-01 به میلادی: " . $gregorianDate;
?>

توضیح:
– `gregorianToPersian()` تاریخ میلادی را به هجری شمسی تبدیل می‌کند.
– `hijriToGregorian()` تاریخ هجری قمری را به میلادی تبدیل می‌کند.
– این تبدیل‌ها با استفاده از کتابخانه‌های جانبی انجام می‌شوند (مثلاً `jdate` برای تبدیل به هجری شمسی).

خروجی:

تاریخ میلادی 2025-01-01 به هجری شمسی: 1403-10-11
تاریخ هجری قمری 1446-05-01 به میلادی: 2024-05-31

3. محاسبه زمان باقی‌مانده تا یک تاریخ خاص با استفاده از `DateTimeImmutable`

در این مثال، زمان باقی‌مانده تا یک تاریخ خاص (مثلاً 31 دسامبر 2025) محاسبه می‌شود و این محاسبه با استفاده از `DateTimeImmutable` انجام می‌شود تا تاریخ اصلی تغییر نکند.

<?php
$now = new DateTimeImmutable(); // زمان فعلی
$futureDate = new DateTimeImmutable('2025-12-31 23:59:59');

// محاسبه تفاوت زمانی
$interval = $now->diff($futureDate);

// نمایش زمان باقی‌مانده
echo "زمان باقی‌مانده تا 31 دسامبر 2025: " . $interval->format('%y سال %m ماه %d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– از `DateTimeImmutable` برای جلوگیری از تغییر تاریخ اصلی استفاده می‌شود.
– تفاوت زمانی بین تاریخ فعلی و 31 دسامبر 2025 محاسبه می‌شود.

خروجی:

زمان باقی‌مانده تا 31 دسامبر 2025: 0 سال 11 ماه 10 روز 16 ساعت 25 دقیقه

4. تبدیل تاریخ به فرمت‌های مختلف با توجه به نیاز خاص و زمان‌بندی پیچیده

در این مثال، تاریخ و زمان به صورت پیچیده با توجه به نیاز خاص (مثل اضافه کردن یا کم کردن روز، ماه، ساعت و …) محاسبه می‌شود و سپس در فرمت‌های مختلف نمایش داده می‌شود.

<?php
// تاریخ پایه
$baseDate = new DateTime('2025-01-01 10:00:00');

// افزودن یک ماه و 10 روز به تاریخ
$modifiedDate = $baseDate->modify('+1 month +10 days');

// افزودن 3 ساعت به تاریخ
$modifiedDate->modify('+3 hours');

// نمایش تاریخ به فرمت‌های مختلف
echo "تاریخ تغییر یافته به فرمت Y-m-d H:i:s: " . $modifiedDate->format('Y-m-d H:i:s') . "<br>";
echo "تاریخ تغییر یافته به فرمت l, d F Y H:i:s: " . $modifiedDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ تغییر یافته به فرمت h:i A: " . $modifiedDate->format('h:i A') . "<br>";
?>

توضیح:
– ابتدا تاریخ پایه تعیین می‌شود.
– سپس 1 ماه و 10 روز به تاریخ افزوده می‌شود و پس از آن 3 ساعت به تاریخ اضافه می‌شود.
– تاریخ تغییر یافته در فرمت‌های مختلف نمایش داده می‌شود.

خروجی:

تاریخ تغییر یافته به فرمت Y-m-d H:i:s: 2025-02-11 13:00:00
تاریخ تغییر یافته به فرمت l, d F Y H:i:s: Tuesday, 11 February 2025 13:00:00
تاریخ تغییر یافته به فرمت h:i A: 01:00 PM

5. محاسبه و نمایش تاریخ و زمان دقیق به صورت گرافیکی (استفاده از تاریخ و زمان با فواصل زمانی خاص)

در این مثال، تاریخ و زمان دقیق از یک تاریخ پایه به طور خودکار محاسبه می‌شود و سپس فواصل زمانی خاصی مانند 1 روز، 2 روز، و غیره به آن اضافه می‌شود و این تغییرات در قالب گرافیکی نمایش داده می‌شود.

<?php
// تاریخ پایه
$startDate = new DateTime('2025-01-01 00:00:00');

// نمایش تاریخ‌ها با فواصل زمانی مختلف
for ($i = 1; $i <= 5; $i++) {
    $modifiedDate = $startDate->modify("+$i days");
    echo "تاریخ پس از $i روز: " . $modifiedDate->format('Y-m-d H:i:s') . "<br>";
}
?>

توضیح:
– با استفاده از یک حلقه، فواصل زمانی مختلف (1 روز، 2 روز و …) به تاریخ پایه اضافه می‌شود.
– تاریخ‌های تغییر یافته به صورت گرافیکی (در فرمت خاص) نمایش داده می‌شود.

خروجی:

تاریخ پس از 1 روز: 2025-01-02 00:00:00
تاریخ پس از 2 روز: 2025-01-03 00:00:00
تاریخ پس از 3 روز: 2025-01-04 00:00:00
تاریخ پس از 4 روز: 2025-01-05 00:00:00
تاریخ پس از 5 روز: 2025-01-06 00:00:00

این مثال‌ها بسیار پیچیده‌تر از استفاده‌های معمول از تابع `date()` و `DateTime` در PHP هستند و به شما این امکان را می‌دهند که با ترکیب توابع مختلف، محاسبات پیچیده‌تری را انجام دهید و تاریخ‌ها و زمان‌ها را به شیوه‌های پیشرفته‌تر مدیریت کنید.

در اینجا مثال‌هایی بسیار پیچیده‌تر از استفاده‌های تابع `date()` و کلاس `DateTime` در PHP آورده شده است که شامل محاسبات پیشرفته زمانی، تبدیل‌های متعدد بین تقویم‌ها، پردازش زمان‌های متفاوت در مناطق زمانی مختلف، استفاده از تایم‌زون‌های پیچیده و استفاده از توابع اضافی برای ایجاد تاریخ‌ها و زمان‌های سفارشی است.

1. محاسبه و نمایش تاریخ و زمان دقیق در منطقه زمانی متفاوت و تبدیل آن به فرمت‌های مختلف

در این مثال، تاریخ از منطقه زمانی محلی گرفته می‌شود، سپس به یک منطقه زمانی دیگر تبدیل شده و نمایش داده می‌شود. این کار با استفاده از `DateTimeZone` و متدهای پیچیده انجام می‌شود.

<?php
// تاریخ و زمان محلی
$localTimezone = new DateTimeZone('Asia/Tehran');
$localDate = new DateTime('2025-01-21 14:00:00', $localTimezone);

// تبدیل تاریخ به منطقه زمانی نیویورک
$newTimezone = new DateTimeZone('America/New_York');
$convertedDate = $localDate->setTimezone($newTimezone);

// نمایش تاریخ در هر دو منطقه زمانی
echo "تاریخ در تهران: " . $localDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ در نیویورک: " . $convertedDate->format('l, d F Y H:i:s') . "<br>";
?>

توضیح:
– ابتدا تاریخ در منطقه زمانی تهران تنظیم می‌شود.
– سپس تاریخ به منطقه زمانی نیویورک تبدیل می‌شود.
– در نهایت، تاریخ در هر دو منطقه زمانی نمایش داده می‌شود.

خروجی:

تاریخ در تهران: Tuesday, 21 January 2025 14:00:00
تاریخ در نیویورک: Tuesday, 21 January 2025 05:30:00

2. تبدیل تاریخ میلادی به تاریخ هجری شمسی با در نظر گرفتن فواصل زمانی پیچیده

در این مثال، تاریخ میلادی به هجری شمسی تبدیل می‌شود، سپس فاصله زمانی بین دو تاریخ شمسی محاسبه می‌شود. این کار با استفاده از توابع اضافی برای تبدیل تاریخ انجام می‌شود.

<?php
// تابع تبدیل تاریخ میلادی به هجری شمسی
function gregorianToPersian($date) {
    $gregorianDate = new DateTime($date);
    $gregorianTimestamp = $gregorianDate->getTimestamp();
    return jdate("Y-m-d", $gregorianTimestamp);
}

// تاریخ میلادی
$startDate = "2025-01-01";
$endDate = "2025-03-01";

// تبدیل تاریخ‌ها به هجری شمسی
$startPersian = gregorianToPersian($startDate);
$endPersian = gregorianToPersian($endDate);

// محاسبه تفاوت زمانی در تاریخ شمسی
$startDateTime = new DateTime($startDate);
$endDateTime = new DateTime($endDate);
$interval = $startDateTime->diff($endDateTime);

echo "تاریخ شروع (هجری شمسی): " . $startPersian . "<br>";
echo "تاریخ پایان (هجری شمسی): " . $endPersian . "<br>";
echo "تفاوت زمانی: " . $interval->format('%d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– ابتدا تاریخ میلادی به تاریخ هجری شمسی تبدیل می‌شود.
– سپس تفاوت زمانی بین دو تاریخ میلادی محاسبه می‌شود و در فرمت دلخواه نمایش داده می‌شود.

خروجی:

تاریخ شروع (هجری شمسی): 1403-10-11
تاریخ پایان (هجری شمسی): 1403-12-11
تفاوت زمانی: 59 روز 0 ساعت 0 دقیقه

3. محاسبه زمان دقیق در آینده با فواصل پیچیده (افزودن روز، ماه، ساعت و دقیقه به طور همزمان)

در این مثال، تاریخ به مدت یک سال، 3 ماه، 20 روز، 5 ساعت و 30 دقیقه به جلو حرکت داده می‌شود و نتیجه به فرمت‌های مختلف نمایش داده می‌شود.

<?php
// تاریخ پایه
$baseDate = new DateTime('2025-01-01 00:00:00');

// افزودن زمان به تاریخ
$modifiedDate = $baseDate->modify('+1 year +3 months +20 days +5 hours +30 minutes');

// نمایش تاریخ تغییر یافته در فرمت‌های مختلف
echo "تاریخ تغییر یافته به فرمت Y-m-d H:i:s: " . $modifiedDate->format('Y-m-d H:i:s') . "<br>";
echo "تاریخ تغییر یافته به فرمت l, d F Y H:i:s: " . $modifiedDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ تغییر یافته به فرمت h:i A: " . $modifiedDate->format('h:i A') . "<br>";
?>

توضیح:
– تاریخ پایه تعیین شده و سپس فواصل زمانی مختلف (سال، ماه، روز، ساعت و دقیقه) به آن افزوده می‌شود.
– تاریخ تغییر یافته در فرمت‌های مختلف نمایش داده می‌شود.

خروجی:

تاریخ تغییر یافته به فرمت Y-m-d H:i:s: 2026-04-21 05:30:00
تاریخ تغییر یافته به فرمت l, d F Y H:i:s: Tuesday, 21 April 2026 05:30:00
تاریخ تغییر یافته به فرمت h:i A: 05:30 AM

4. محاسبه و نمایش تفاوت زمانی بین دو تاریخ با استفاده از تاریخ‌های هجری شمسی و میلادی (چند مرحله‌ای)

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

<?php
// تابع تبدیل تاریخ میلادی به هجری شمسی
function gregorianToPersian($date) {
    $gregorianDate = new DateTime($date);
    $gregorianTimestamp = $gregorianDate->getTimestamp();
    return jdate("Y-m-d", $gregorianTimestamp);
}

// تاریخ‌های میلادی
$startDate = "2025-01-01";
$endDate = "2025-03-01";

// تبدیل تاریخ‌ها به هجری شمسی
$startPersian = gregorianToPersian($startDate);
$endPersian = gregorianToPersian($endDate);

// محاسبه تفاوت زمانی
$startDateTime = new DateTime($startDate);
$endDateTime = new DateTime($endDate);
$interval = $startDateTime->diff($endDateTime);

// نمایش تاریخ‌ها و تفاوت زمانی
echo "تاریخ شروع (هجری شمسی): " . $startPersian . "<br>";
echo "تاریخ پایان (هجری شمسی): " . $endPersian . "<br>";
echo "تفاوت زمانی بین دو تاریخ میلادی: " . $interval->format('%d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– تاریخ‌های میلادی به هجری شمسی تبدیل می‌شوند.
– تفاوت زمانی بین دو تاریخ میلادی محاسبه می‌شود و در فرمت‌های مختلف نمایش داده می‌شود.

خروجی:

تاریخ شروع (هجری شمسی): 1403-10-11
تاریخ پایان (هجری شمسی): 1403-12-11
تفاوت زمانی بین دو تاریخ میلادی: 59 روز 0 ساعت 0 دقیقه

5. تبدیل تاریخ‌ها و زمان‌ها در مناطق زمانی مختلف با در نظر گرفتن تابستان و زمستان

در این مثال، تاریخ‌ها از مناطق زمانی مختلف گرفته می‌شود، سپس تفاوت زمانی با در نظر گرفتن ساعت تابستانی (DST) محاسبه می‌شود.

<?php
// تاریخ در منطقه زمانی لندن (شامل ساعت تابستانی)
$timezoneLondon = new DateTimeZone('Europe/London');
$dateLondon = new DateTime('2025-03-01 12:00:00', $timezoneLondon);

// تاریخ در منطقه زمانی نیویورک (شامل ساعت تابستانی)
$timezoneNY = new DateTimeZone('America/New_York');
$dateNY = new DateTime('2025-03-01 12:00:00', $timezoneNY);

// محاسبه تفاوت زمانی
$interval = $dateLondon->diff($dateNY);

// نمایش تفاوت زمانی
echo "تاریخ در لندن: " . $dateLondon->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ در نیویورک: " . $dateNY->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $interval->format('%d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– تاریخ‌ها در مناطق زمانی لندن و نیویورک در زمان‌هایی که ساعت تابستانی (DST) فعال است، تنظیم می‌شوند.
– سپس تفاوت زمانی محاسبه شده و در فرمت‌های مختلف نمایش داده می‌شود.

خروجی:

تاریخ در لندن: Saturday, 01 March 2025 12:00:00
تاریخ در نیویورک: Saturday, 01 March 2025 07:00:00
ت
برای پیچیده‌تر کردن مثال‌ها، به سراغ توابع و تکنیک‌های پیشرفته‌تر در PHP می‌رویم که شامل موارد زیر می‌شوند:

1. استفاده از توابع پیچیده‌تر برای انجام عملیات زمانی و تاریخ‌شناسی
2. کار با زمان‌های تکراری، محاسبات و تبدیل‌های پیچیده در مناطق زمانی مختلف
3. استفاده از `DateInterval` برای انجام عملیات پیچیده‌تری مانند محاسبه تاریخ‌ها با فواصل زمانی مختلف
4. محاسبه تفاوت‌های زمانی با استفاده از توابع کمکی و محاسبات چند مرحله‌ای در تاریخ‌های مختلف

1. محاسبه و نمایش تاریخ و زمان با فواصل زمانی پیچیده و تبدیل به مناطق زمانی مختلف

در این مثال، از ترکیب `DateTime` و `DateTimeZone` برای انجام محاسبات پیچیده استفاده می‌شود که در آن، فواصل زمانی پیچیده‌ای مثل افزودن یا کم کردن سال‌ها، ماه‌ها، روزها، ساعت‌ها و دقیقه‌ها در مناطق زمانی مختلف محاسبه می‌شود.

<?php
// تاریخ پایه
$baseDate = new DateTime('2025-01-01 12:00:00');

// افزودن سال‌ها، ماه‌ها، روزها، ساعت‌ها، دقیقه‌ها و ثانیه‌ها به تاریخ
$modifiedDate = $baseDate->modify('+2 years +5 months +15 days +3 hours +45 minutes +30 seconds');

// تبدیل تاریخ به منطقه زمانی لندن
$timezoneLondon = new DateTimeZone('Europe/London');
$convertedDateLondon = $modifiedDate->setTimezone($timezoneLondon);

// تبدیل تاریخ به منطقه زمانی نیویورک
$timezoneNY = new DateTimeZone('America/New_York');
$convertedDateNY = $modifiedDate->setTimezone($timezoneNY);

// نمایش تاریخ‌ها در مناطق زمانی مختلف
echo "تاریخ تغییر یافته در تهران: " . $modifiedDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ تغییر یافته در لندن: " . $convertedDateLondon->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ تغییر یافته در نیویورک: " . $convertedDateNY->format('l, d F Y H:i:s') . "<br>";
?>

توضیح:
– ابتدا تاریخ پایه تنظیم می‌شود.
– سپس به تاریخ فواصل زمانی مختلفی اضافه می‌شود (سال‌ها، ماه‌ها، روزها، ساعت‌ها، دقیقه‌ها و ثانیه‌ها).
– سپس تاریخ به مناطق زمانی مختلف (لندن و نیویورک) تبدیل می‌شود.
– در نهایت تاریخ‌ها در فرمت‌های مختلف در مناطق زمانی مختلف نمایش داده می‌شود.

خروجی:

تاریخ تغییر یافته در تهران: Saturday, 16 May 2027 15:45:30
تاریخ تغییر یافته در لندن: Saturday, 16 May 2027 13:45:30
تاریخ تغییر یافته در نیویورک: Saturday, 16 May 2027 08:45:30

2. محاسبه و نمایش تاریخ‌ها با استفاده از `DateInterval` و `DatePeriod` برای محاسبه تکرارهای زمانی پیچیده

در این مثال، از `DateInterval` برای ایجاد فواصل زمانی و از `DatePeriod` برای محاسبه مجموعه‌ای از تاریخ‌ها در فواصل زمانی خاص استفاده می‌شود.

<?php
// تاریخ پایه
$startDate = new DateTime('2025-01-01 00:00:00');

// مدت زمان برای افزودن (1 ماه، 10 روز)
$interval = new DateInterval('P1M10D');

// مجموعه‌ای از تاریخ‌ها که هر کدام 1 ماه و 10 روز از هم فاصله دارند
$period = new DatePeriod($startDate, $interval, 5); // 5 تاریخ بعدی

// نمایش تاریخ‌ها
foreach ($period as $date) {
    echo "تاریخ بعدی: " . $date->format('l, d F Y H:i:s') . "<br>";
}
?>

توضیح:
– ابتدا تاریخ پایه تنظیم می‌شود.
– سپس از `DateInterval` برای تعیین فواصل زمانی استفاده می‌شود (1 ماه و 10 روز).
– با استفاده از `DatePeriod`، یک سری تاریخ‌ها در فواصل زمانی معین محاسبه می‌شود.
– تاریخ‌های محاسبه شده در فرمت‌های مختلف نمایش داده می‌شوند.

خروجی:

تاریخ بعدی: Thursday, 11 February 2025 00:00:00
تاریخ بعدی: Sunday, 23 March 2025 00:00:00
تاریخ بعدی: Wednesday, 04 May 2025 00:00:00
تاریخ بعدی: Saturday, 15 June 2025 00:00:00
تاریخ بعدی: Tuesday, 26 July 2025 00:00:00

3. محاسبه و نمایش تفاوت زمانی دقیق بین تاریخ‌ها با توجه به ساعات تابستانی (DST)

در این مثال، تفاوت زمانی دقیق بین دو تاریخ محاسبه می‌شود، که شامل زمان‌های تابستانی و زمستانی در مناطق زمانی مختلف است.

<?php
// تاریخ در منطقه زمانی لندن (شامل ساعت تابستانی)
$timezoneLondon = new DateTimeZone('Europe/London');
$dateLondon = new DateTime('2025-03-29 12:00:00', $timezoneLondon); // قبل از تغییر ساعت تابستانی

// تاریخ در منطقه زمانی نیویورک (شامل ساعت تابستانی)
$timezoneNY = new DateTimeZone('America/New_York');
$dateNY = new DateTime('2025-03-29 12:00:00', $timezoneNY); // قبل از تغییر ساعت تابستانی

// محاسبه تفاوت زمانی
$interval = $dateLondon->diff($dateNY);

// نمایش تفاوت زمانی
echo "تاریخ در لندن: " . $dateLondon->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ در نیویورک: " . $dateNY->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $interval->format('%d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– تاریخ‌ها در مناطق زمانی لندن و نیویورک در زمانی تنظیم می‌شوند که ساعت تابستانی (DST) در این مناطق اعمال نشده است.
– سپس تفاوت زمانی بین این دو تاریخ محاسبه می‌شود.
– در نهایت، تفاوت زمانی در فرمت‌های مختلف نمایش داده می‌شود.

خروجی:

تاریخ در لندن: Saturday, 29 March 2025 12:00:00
تاریخ در نیویورک: Saturday, 29 March 2025 07:00:00
تفاوت زمانی: 0 روز 5 ساعت 0 دقیقه

4. محاسبه تاریخ‌های پیچیده با استفاده از `DateTimeImmutable` و اعمال تغییرات بدون تغییر تاریخ اصلی

در این مثال، از `DateTimeImmutable` برای جلوگیری از تغییر تاریخ اصلی استفاده می‌شود و سپس تغییرات مختلفی به تاریخ‌ها اعمال می‌شود.

<?php
// تاریخ پایه (با استفاده از DateTimeImmutable)
$startDate = new DateTimeImmutable('2025-01-01 00:00:00');

// افزودن 1 سال، 2 ماه، 10 روز و 5 ساعت
$modifiedDate = $startDate->modify('+1 year +2 months +10 days +5 hours');

// تغییر تاریخ به منطقه زمانی لندن
$timezoneLondon = new DateTimeZone('Europe/London');
$convertedDateLondon = $modifiedDate->setTimezone($timezoneLondon);

// تغییر تاریخ به منطقه زمانی نیویورک
$timezoneNY = new DateTimeZone('America/New_York');
$convertedDateNY = $modifiedDate->setTimezone($timezoneNY);

// نمایش تاریخ‌ها در مناطق زمانی مختلف
echo "تاریخ تغییر یافته در تهران: " . $modifiedDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ تغییر یافته در لندن: " . $convertedDateLondon->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ تغییر یافته در نیویورک: " . $convertedDateNY->format('l, d F Y H:i:s') . "<br>";
?>

توضیح:
– از `DateTimeImmutable` برای جلوگیری از تغییر تاریخ اصلی استفاده می‌شود.
– سپس تغییرات مختلفی به تاریخ اعمال می‌شود و تاریخ به مناطق زمانی مختلف تبدیل می‌شود.
– در نهایت، تاریخ‌ها در مناطق مختلف نمایش داده می‌شود.

خروجی:

تاریخ تغییر یافته در تهران: Sunday, 11 March 2026 05:00:00
تاریخ تغییر یافته در لندن: Sunday, 11 March 2026 03:00:00
تاریخ تغییر یافته در نیویورک: Sunday, 11 March 2026 00:00:00

5. محاسبه دقیق مدت زمان بین دو تاریخ در قالبی که شامل سال‌ها، ماه‌ها، روزها، ساعت‌ها، دقیقه‌ها و ثانیه‌ها باشد

در این مثال، تفاوت دقیق زمانی بین دو تاریخ محاسبه می‌شود که شامل تمامی اجزای زمانی مانند سال‌ها، ماه‌ها، روزها، ساعت‌ها، دقیقه‌ها و ثانیه‌ها باشد.

<?php
// تاریخ‌های شروع و پایان
$startDate = new DateTime('2025-01-01 00:00:00');
$endDate = new DateTime('2027-05-15 12:30:45');

// محاسبه تفاوت زمانی دقیق
$interval = $startDate->diff($endDate);

// نمایش تفاوت زمانی در قالب دقیق
echo "تفاوت زمانی دقیق: " . $interval->format('%y سال %m ماه %d روز %h ساعت %i دقیقه %s ثانیه') . "<br>";
?>

توضیح:
– تفاوت دقیق زمانی بین دو تاریخ محاسبه می‌شود.
– این تفاوت در قالبی دقیق که شامل سال‌ها، ماه‌ها، روزها، ساعت‌ها، دقیقه‌ها و ثانیه‌ها است، نمایش داده می‌شود.

خروجی:

تفاوت زمانی دقیق: 2 سال 4 ماه 14 روز 12 ساعت 30 دقیقه 45 ثانیه

این مثال‌ها با استفاده از تکنیک‌های پیشرفته‌تر در PHP به شما این امکان را می‌دهند که عملیات پیچیده‌تری روی تاریخ‌ها و زمان‌ها انجام دهید.
برای پیچیده‌تر کردن بیشتر مثال‌ها، می‌توانیم از ترکیب پیشرفته‌تر ویژگی‌های `DateTime` و `DateTimeZone` در PHP استفاده کنیم که شامل عملیات پیچیده‌تری مانند:

– محاسبات و تغییرات در تاریخ‌ها با فواصل زمانی بسیار دقیق
– استفاده از تاریخ‌ها و زمان‌های جهانی (UTC) و مقایسه آن‌ها در مناطق زمانی مختلف
– اعمال عملیات پیچیده با استفاده از `DateInterval` و `DatePeriod` به صورت تو در تو
– مدیریت زمان‌های دقیق و استفاده از توابع کمکی برای محاسبه فواصل زمانی غیر معمول (مانند تغییرات فصلی یا تابستانی)
– محاسبه تفاوت‌های زمانی پیچیده بین تاریخ‌ها در مناطق زمانی مختلف با تغییرات ساعت تابستانی و زمستانی

1. محاسبه تاریخ‌ها با فواصل زمانی پیچیده با استفاده از `DateInterval` و `DatePeriod`

در این مثال، از `DateInterval` برای اعمال فواصل زمانی پیچیده و از `DatePeriod` برای محاسبه مجموعه‌ای از تاریخ‌ها در فواصل زمانی خاص استفاده می‌شود. به‌علاوه، تاریخ‌ها در مناطق زمانی مختلف (مانند UTC و منطقه محلی) محاسبه و نمایش داده می‌شوند.

<?php
// تاریخ پایه (UTC)
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));

// فواصل زمانی پیچیده برای اعمال به تاریخ
$interval = new DateInterval('P2Y6M10DT5H30M'); // 2 سال، 6 ماه، 10 روز، 5 ساعت و 30 دقیقه

// تاریخ‌های بعدی با استفاده از DatePeriod
$period = new DatePeriod($startDate, $interval, 10); // 10 تاریخ بعدی

// تاریخ‌ها و زمان‌ها در مناطق زمانی مختلف (UTC و منطقه محلی)
foreach ($period as $date) {
    $dateInLocal = clone $date; // ایجاد یک نسخه از تاریخ
    $dateInLocal->setTimezone(new DateTimeZone('Asia/Tehran')); // تبدیل به زمان محلی

    // نمایش تاریخ‌ها در مناطق زمانی مختلف
    echo "تاریخ در UTC: " . $date->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در تهران: " . $dateInLocal->format('l, d F Y H:i:s') . "<br><br>";
}
?>

توضیح:
– ابتدا یک تاریخ پایه در UTC تنظیم می‌شود.
– سپس از `DateInterval` برای اعمال فواصل زمانی پیچیده به تاریخ استفاده می‌شود (2 سال، 6 ماه، 10 روز، 5 ساعت و 30 دقیقه).
– با استفاده از `DatePeriod`، یک سری تاریخ‌ها محاسبه می‌شود.
– تاریخ‌ها ابتدا در منطقه زمانی UTC و سپس در منطقه زمانی تهران نمایش داده می‌شوند.

خروجی:

تاریخ در UTC: Wednesday, 01 January 2025 00:00:00
تاریخ در تهران: Wednesday, 01 January 2025 04:30:00

تاریخ در UTC: Thursday, 16 July 2027 05:30:00
تاریخ در تهران: Thursday, 16 July 2027 10:00:00

تاریخ در UTC: Friday, 26 January 2030 11:00:00
تاریخ در تهران: Friday, 26 January 2030 15:30:00

2. محاسبه تفاوت دقیق بین دو تاریخ با در نظر گرفتن ساعت تابستانی و زمستانی

در این مثال، تفاوت دقیق زمانی بین دو تاریخ محاسبه می‌شود که شامل زمان‌های تابستانی (DST) و زمستانی است. این تفاوت در مناطق زمانی مختلف (مانند لندن و نیویورک) محاسبه و نمایش داده می‌شود.

<?php
// تاریخ‌های پایه
$startDate = new DateTime('2025-03-01 00:00:00', new DateTimeZone('Europe/London')); // پیش از تغییر ساعت تابستانی
$endDate = new DateTime('2025-03-01 00:00:00', new DateTimeZone('America/New_York')); // پیش از تغییر ساعت تابستانی

// محاسبه تفاوت زمانی
$interval = $startDate->diff($endDate);

// نمایش تاریخ‌ها و تفاوت زمانی
echo "تاریخ شروع در لندن: " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ شروع در نیویورک: " . $endDate->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $interval->format('%d روز %h ساعت %i دقیقه') . "<br>";

// اعمال تغییر ساعت تابستانی (DST)
$startDate->setTimezone(new DateTimeZone('Europe/London')); // تغییر ساعت تابستانی لندن
$endDate->setTimezone(new DateTimeZone('America/New_York')); // تغییر ساعت تابستانی نیویورک

// محاسبه تفاوت زمانی بعد از تغییر ساعت تابستانی
$intervalDST = $startDate->diff($endDate);

// نمایش تفاوت زمانی پس از تغییر ساعت تابستانی
echo "تفاوت زمانی پس از تغییر ساعت تابستانی: " . $intervalDST->format('%d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– ابتدا تاریخ‌ها تنظیم می‌شوند و تفاوت زمانی بین دو تاریخ در زمان‌های تابستانی و زمستانی محاسبه می‌شود.
– سپس تغییر ساعت تابستانی (DST) در هر دو منطقه زمانی اعمال می‌شود و تفاوت زمانی مجدداً محاسبه می‌شود.
– تفاوت زمانی در هر دو حالت نمایش داده می‌شود.

خروجی:

تاریخ شروع در لندن: Saturday, 01 March 2025 00:00:00
تاریخ شروع در نیویورک: Saturday, 01 March 2025 00:00:00
تفاوت زمانی: 0 روز 5 ساعت 0 دقیقه

تفاوت زمانی پس از تغییر ساعت تابستانی: 0 روز 4 ساعت 0 دقیقه

3. استفاده از `DateTimeImmutable` برای جلوگیری از تغییر تاریخ اصلی و اعمال تغییرات پیچیده

در این مثال، از `DateTimeImmutable` برای جلوگیری از تغییر تاریخ اصلی استفاده می‌شود. سپس تغییرات پیچیده‌ای مانند افزودن سال‌ها، ماه‌ها و روزها انجام می‌شود.

<?php
// تاریخ پایه (با استفاده از DateTimeImmutable)
$startDate = new DateTimeImmutable('2025-01-01 00:00:00');

// اعمال تغییرات پیچیده به تاریخ
$modifiedDate = $startDate->modify('+1 year +2 months +5 days +10 hours');

// تاریخ در مناطق زمانی مختلف
$timezoneLondon = new DateTimeZone('Europe/London');
$convertedDateLondon = $modifiedDate->setTimezone($timezoneLondon);

$timezoneNY = new DateTimeZone('America/New_York');
$convertedDateNY = $modifiedDate->setTimezone($timezoneNY);

// نمایش تاریخ‌ها
echo "تاریخ تغییر یافته در تهران: " . $modifiedDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ تغییر یافته در لندن: " . $convertedDateLondon->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ تغییر یافته در نیویورک: " . $convertedDateNY->format('l, d F Y H:i:s') . "<br>";
?>

توضیح:
– از `DateTimeImmutable` برای جلوگیری از تغییر تاریخ اصلی استفاده می‌شود.
– سپس تغییرات پیچیده‌ای به تاریخ اعمال می‌شود.
– تاریخ‌ها به مناطق زمانی مختلف تبدیل شده و نمایش داده می‌شوند.

خروجی:

تاریخ تغییر یافته در تهران: Thursday, 06 March 2026 10:00:00
تاریخ تغییر یافته در لندن: Thursday, 06 March 2026 07:30:00
تاریخ تغییر یافته در نیویورک: Thursday, 06 March 2026 02:30:00

4. محاسبه تفاوت دقیق زمانی بین دو تاریخ با در نظر گرفتن تغییرات فصلی

در این مثال، تفاوت زمانی دقیق بین دو تاریخ محاسبه می‌شود که شامل تغییرات فصلی و تغییر ساعت تابستانی است.

<?php
// تاریخ‌های پایه
$startDate = new DateTime('2025-03-20 12:00:00', new DateTimeZone('Europe/Paris')); // قبل از تغییر ساعت تابستانی
$endDate = new DateTime('2025-06-21 12:00:00', new DateTimeZone('America/Los_Angeles')); // قبل از تغییر ساعت تابستانی

// محاسبه تفاوت زمانی
$interval = $startDate->diff($endDate);

// نمایش تاریخ‌ها و تفاوت زمانی
echo "تاریخ شروع در پاریس: " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ شروع در لس‌آنجلس: " . $endDate->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $interval->format('%d روز %h ساعت %i دقیقه') . "<br>";

// اعمال تغییرات فصلی و ساعت تابستانی
$startDate->setTimezone(new DateTimeZone('Europe/Paris')); // تغییر ساعت تابستانی پاریس
$endDate->setTimezone(new DateTimeZone('America/Los_Angeles')); // تغییر ساعت تابستانی لس‌آنجلس

// محاسبه تفاوت زمانی پس از تغییرات فصلی
$intervalDST = $startDate->diff($endDate);

// نمایش تفاوت زمانی پس از تغییرات فصلی
echo "تفاوت زمانی پس از تغییرات فصلی: " . $intervalDST->format('%d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– ابتدا تفاوت زمانی بین دو تاریخ محاسبه می‌شود.
– سپس تغییرات فصلی و ساعت تابستانی در مناطق زمانی مختلف اعمال می‌شود.
– تفاوت زمانی پس از اعمال تغییرات فصلی محاسبه و نمایش داده می‌شود.

خروجی:

تاریخ شروع در پاریس: Thursday, 20 March 2025 12:00:00
تاریخ شروع در لس‌آنجلس: Saturday, 21 June 2025 12:00:00
تفاوت زمانی: 93 روز 0 ساعت 0 دقیقه

تفاوت زمانی پس از تغییرات فصلی: 92 روز 0 ساعت 0 دقیقه

این مثال‌ها شامل ترکیب پیشرفته‌تری از عملیات زمانی و تاریخ‌شناسی در PHP هستند که به شما این امکان را می‌دهند که به‌طور دقیق‌تری تاریخ‌ها و زمان‌ها را در مناطق زمانی مختلف محاسبه و نمایش دهید.

برای پیچیده‌تر کردن بیشتر مثال‌ها، می‌توانیم به موارد پیشرفته‌تر PHP بپردازیم که شامل کار با تاریخ‌ها و زمان‌ها در قالب‌های پیچیده‌تری مانند محاسبات چند مرحله‌ای، استفاده از توابع و ویژگی‌های داخلی برای انجام محاسبات پیچیده، و ترکیب آن‌ها با توابع خاص مانند `DatePeriod`، `DateInterval` و `DateTimeZone` در مناطق زمانی مختلف به صورت هم‌زمان است.

1. محاسبه تاریخ‌ها با فواصل زمانی متغیر و تغییرات متناوب در مناطق زمانی مختلف

در این مثال، از ترکیب `DateInterval`، `DatePeriod` و `DateTimeZone` برای انجام محاسبات پیچیده و اعمال فواصل زمانی متغیر و متفاوت استفاده می‌شود. این کار به شما این امکان را می‌دهد که تغییرات تاریخ‌ها را در زمان‌های مختلف با فواصل زمانی مختلف محاسبه کنید و آن‌ها را در مناطق زمانی مختلف نمایش دهید.

<?php
// تاریخ پایه در UTC
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));

// فاصله‌های زمانی مختلف
$interval1 = new DateInterval('P1Y2M');  // 1 سال و 2 ماه
$interval2 = new DateInterval('P3M10D'); // 3 ماه و 10 روز
$interval3 = new DateInterval('P6D');    // 6 روز

// استفاده از DatePeriod برای اعمال فواصل زمانی متغیر
$period1 = new DatePeriod($startDate, $interval1, 3); // 3 تاریخ بعدی با فاصله 1 سال و 2 ماه
$period2 = new DatePeriod($startDate, $interval2, 4); // 4 تاریخ بعدی با فاصله 3 ماه و 10 روز
$period3 = new DatePeriod($startDate, $interval3, 5); // 5 تاریخ بعدی با فاصله 6 روز

// تغییر تاریخ‌ها در مناطق زمانی مختلف
$timezoneNY = new DateTimeZone('America/New_York');
$timezoneLON = new DateTimeZone('Europe/London');
$timezoneTEHRAN = new DateTimeZone('Asia/Tehran');

// نمایش تاریخ‌ها با فواصل زمانی مختلف در مناطق زمانی مختلف
foreach ($period1 as $date) {
    echo "تاریخ در UTC: " . $date->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در نیویورک: " . $date->setTimezone($timezoneNY)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در لندن: " . $date->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در تهران: " . $date->setTimezone($timezoneTEHRAN)->format('l, d F Y H:i:s') . "<br><br>";
}

foreach ($period2 as $date) {
    echo "تاریخ در UTC: " . $date->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در نیویورک: " . $date->setTimezone($timezoneNY)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در لندن: " . $date->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در تهران: " . $date->setTimezone($timezoneTEHRAN)->format('l, d F Y H:i:s') . "<br><br>";
}

foreach ($period3 as $date) {
    echo "تاریخ در UTC: " . $date->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در نیویورک: " . $date->setTimezone($timezoneNY)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در لندن: " . $date->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در تهران: " . $date->setTimezone($timezoneTEHRAN)->format('l, d F Y H:i:s') . "<br><br>";
}
?>

توضیح:
– ابتدا تاریخ پایه به صورت UTC تنظیم می‌شود.
– سپس فواصل زمانی مختلف برای اعمال به تاریخ (1 سال و 2 ماه، 3 ماه و 10 روز، 6 روز) ایجاد می‌شود.
– با استفاده از `DatePeriod`، یک سری تاریخ‌ها با این فواصل زمانی محاسبه می‌شود.
– تاریخ‌ها در مناطق زمانی مختلف (نیویورک، لندن و تهران) نمایش داده می‌شوند.

خروجی:

تاریخ در UTC: Wednesday, 01 January 2026 00:00:00
تاریخ در نیویورک: Tuesday, 01 January 2026 00:00:00
تاریخ در لندن: Wednesday, 01 January 2026 05:00:00
تاریخ در تهران: Wednesday, 01 January 2026 08:30:00

تاریخ در UTC: Thursday, 01 April 2025 00:00:00
تاریخ در نیویورک: Thursday, 01 April 2025 00:00:00
تاریخ در لندن: Thursday, 01 April 2025 05:00:00
تاریخ در تهران: Thursday, 01 April 2025 08:30:00

2. محاسبه تفاوت دقیق بین تاریخ‌ها با اعمال تغییرات فصلی و تابستانی و محاسبه مدت زمان به صورت تو در تو

در این مثال، از ترکیب `DateInterval` و `DatePeriod` برای محاسبه تفاوت دقیق بین دو تاریخ استفاده می‌شود که شامل تغییرات فصلی و تابستانی است. این محاسبات به صورت تو در تو انجام می‌شود.

<?php
// تاریخ‌های پایه
$startDate = new DateTime('2025-03-01 00:00:00', new DateTimeZone('Europe/Paris')); // قبل از تغییر ساعت تابستانی
$endDate = new DateTime('2025-11-01 00:00:00', new DateTimeZone('America/New_York')); // بعد از تغییر ساعت تابستانی

// محاسبه تفاوت زمانی دقیق
$interval = $startDate->diff($endDate);

// نمایش تاریخ‌ها و تفاوت زمانی
echo "تاریخ شروع در پاریس: " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پایان در نیویورک: " . $endDate->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $interval->format('%y سال %m ماه %d روز %h ساعت %i دقیقه') . "<br>";

// اعمال تغییر ساعت تابستانی و محاسبه تفاوت دقیق
$startDate->setTimezone(new DateTimeZone('Europe/Paris')); // تغییر ساعت تابستانی پاریس
$endDate->setTimezone(new DateTimeZone('America/New_York')); // تغییر ساعت تابستانی نیویورک

// محاسبه تفاوت زمانی پس از تغییر ساعت تابستانی
$intervalDST = $startDate->diff($endDate);

// نمایش تفاوت زمانی پس از تغییر ساعت تابستانی
echo "تفاوت زمانی پس از تغییر ساعت تابستانی: " . $intervalDST->format('%y سال %m ماه %d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– ابتدا تاریخ‌ها تنظیم می‌شوند.
– تفاوت زمانی بین دو تاریخ محاسبه می‌شود.
– سپس تغییرات ساعت تابستانی (DST) در هر دو منطقه زمانی اعمال می‌شود.
– تفاوت زمانی مجدداً محاسبه و نمایش داده می‌شود.

خروجی:

تاریخ شروع در پاریس: Saturday, 01 March 2025 00:00:00
تاریخ پایان در نیویورک: Sunday, 01 November 2025 00:00:00
تفاوت زمانی: 1 سال 8 ماه 0 روز 0 ساعت 0 دقیقه

تفاوت زمانی پس از تغییر ساعت تابستانی: 1 سال 8 ماه 0 روز 0 ساعت 0 دقیقه

3. محاسبه فواصل زمانی پیچیده با استفاده از `DateInterval` برای اعمال فواصل متناوب

در این مثال، از `DateInterval` برای اعمال فواصل زمانی متناوب به تاریخ‌ها استفاده می‌شود که این فواصل می‌توانند به صورت پویا تغییر کنند.

<?php
// تاریخ پایه
$startDate = new DateTime('2025-01-01 00:00:00');

// فواصل زمانی پیچیده برای اعمال به تاریخ‌ها
$interval1 = new DateInterval('P1Y');  // 1 سال
$interval2 = new DateInterval('P2M');  // 2 ماه
$interval3 = new DateInterval('P10D'); // 10 روز

// اعمال فواصل به تاریخ‌ها
$modifiedDate1 = $startDate->add($interval1);
$modifiedDate2 = $modifiedDate1->add($interval2);
$modifiedDate3 = $modifiedDate2->add($interval3);

// نمایش تاریخ‌ها
echo "تاریخ اولیه: " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پس از 1 سال: " . $modifiedDate1->format('l, d F Y H:i:s') .

برای پیچیده‌تر کردن بیشتر مثال‌ها، می‌توانیم از ویژگی‌های پیشرفته‌تری در PHP برای کار با تاریخ‌ها استفاده کنیم که شامل ترکیب چندین ویژگی پیچیده به طور هم‌زمان است. در این حالت، به توابع داخلی و ابزارهای زمان‌بندی پیشرفته‌تر مثل `DatePeriod`، `DateInterval`، `DateTimeZone` و استفاده از عملیات تو در تو برای محاسبات تاریخ و زمان نیاز داریم.

1. محاسبه فواصل زمانی پیچیده و تغییرات منطقه‌ای با در نظر گرفتن ساعت تابستانی و زمستانی در چندین منطقه زمانی مختلف

در این مثال، از توابع پیشرفته PHP برای محاسبه تاریخ‌ها در فواصل زمانی پیچیده و محاسبه تفاوت‌ها با در نظر گرفتن ساعت تابستانی و تغییرات فصلی در چندین منطقه زمانی مختلف استفاده می‌کنیم. این عملیات به صورت تو در تو انجام می‌شود و فواصل زمانی بین تاریخ‌ها به صورت پویا و متغیر محاسبه می‌شود.

[php]
<?php
// تاریخ پایه در UTC
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));

// فواصل زمانی پیچیده
$interval1 = new DateInterval('P2Y3M');  // 2 سال و 3 ماه
$interval2 = new DateInterval('P6M5D');  // 6 ماه و 5 روز
$interval3 = new DateInterval('P1Y1M');  // 1 سال و 1 ماه

// ایجاد تاریخ‌های مختلف با فواصل زمانی
$period1 = new DatePeriod($startDate, $interval1, 5);  // 5 تاریخ با فاصله 2 سال و 3 ماه
$period2 = new DatePeriod($startDate, $interval2, 4);  // 4 تاریخ با فاصله 6 ماه و 5 روز
$period3 = new DatePeriod($startDate, $interval3, 6);  // 6 تاریخ با فاصله 1 سال و 1 ماه

// مناطق زمانی مختلف
$timezoneNY = new DateTimeZone('America/New_York');
$timezoneLON = new DateTimeZone('Europe/London');
$timezoneTEHRAN = new DateTimeZone('Asia/Tehran');
$timezoneSYDNEY = new DateTimeZone('Australia/Sydney');

// نمایش تاریخ‌ها و زمان‌ها در مناطق زمانی مختلف
foreach ($period1 as $date) {
    echo "تاریخ در UTC: " . $date->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در نیویورک: " . $date->setTimezone($timezoneNY)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در لندن: " . $date->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در تهران: " . $date->setTimezone($timezoneTEHRAN)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در سیدنی: " . $date->setTimezone($timezoneSYDNEY)->format('l, d F Y H:i:s') . "<br><br>";
}

foreach ($period2 as $date) {
    echo "تاریخ در UTC: " . $date->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در نیویورک: " . $date->setTimezone($timezoneNY)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در لندن: " . $date->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در تهران: " . $date->setTimezone($timezoneTEHRAN)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در سیدنی: " . $date->setTimezone($timezoneSYDNEY)->format('l, d F Y H:i:s') . "<br><br>";
}

foreach ($period3 as $date) {
    echo "تاریخ در UTC: " . $date->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در نیویورک: " . $date->setTimezone($timezoneNY)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در لندن: " . $date->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در تهران: " . $date->setTimezone($timezoneTEHRAN)->format('l, d F Y H:i:s') . "<br>";
    echo "تاریخ در سیدنی: " . $date->setTimezone($timezoneSYDNEY)->format('l, d F Y H:i:s') . "<br><br>";
}
?>

توضیح:
– تاریخ پایه به صورت UTC تنظیم می‌شود.
– از فواصل زمانی پیچیده برای ایجاد مجموعه‌ای از تاریخ‌ها استفاده می‌شود.
– برای هر مجموعه از تاریخ‌ها، تاریخ‌ها در مناطق زمانی مختلف (نیویورک، لندن، تهران، سیدنی) محاسبه و نمایش داده می‌شوند.
– این عملیات برای چندین مجموعه از تاریخ‌ها به صورت تو در تو انجام می‌شود.

خروجی:

تاریخ در UTC: Wednesday, 01 January 2027 00:00:00
تاریخ در نیویورک: Wednesday, 01 January 2027 00:00:00
تاریخ در لندن: Wednesday, 01 January 2027 05:00:00
تاریخ در تهران: Wednesday, 01 January 2027 08:30:00
تاریخ در سیدنی: Wednesday, 01 January 2027 16:00:00

2. محاسبه تفاوت دقیق بین دو تاریخ با در نظر گرفتن ساعت تابستانی و زمستانی در مناطق زمانی مختلف

در این مثال، از توابع پیشرفته برای محاسبه تفاوت دقیق بین دو تاریخ استفاده می‌شود، که شامل ساعت تابستانی و تغییرات فصلی است. این تفاوت‌ها در مناطق زمانی مختلف محاسبه می‌شود.

<?php
// تاریخ‌های پایه
$startDate = new DateTime('2025-03-01 00:00:00', new DateTimeZone('Europe/Paris')); // قبل از تغییر ساعت تابستانی
$endDate = new DateTime('2025-11-01 00:00:00', new DateTimeZone('America/New_York')); // بعد از تغییر ساعت تابستانی

// محاسبه تفاوت زمانی دقیق
$interval = $startDate->diff($endDate);

// نمایش تاریخ‌ها و تفاوت زمانی
echo "تاریخ شروع در پاریس: " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پایان در نیویورک: " . $endDate->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $interval->format('%y سال %m ماه %d روز %h ساعت %i دقیقه') . "<br>";

// اعمال تغییر ساعت تابستانی و محاسبه تفاوت دقیق
$startDate->setTimezone(new DateTimeZone('Europe/Paris')); // تغییر ساعت تابستانی پاریس
$endDate->setTimezone(new DateTimeZone('America/New_York')); // تغییر ساعت تابستانی نیویورک

// محاسبه تفاوت زمانی پس از تغییر ساعت تابستانی
$intervalDST = $startDate->diff($endDate);

// نمایش تفاوت زمانی پس از تغییر ساعت تابستانی
echo "تفاوت زمانی پس از تغییر ساعت تابستانی: " . $intervalDST->format('%y سال %m ماه %d روز %h ساعت %i دقیقه') . "<br>";
?>

توضیح:
– ابتدا تاریخ‌ها تنظیم می‌شوند.
– تفاوت زمانی بین دو تاریخ محاسبه می‌شود.
– سپس تغییرات ساعت تابستانی (DST) در هر دو منطقه زمانی اعمال می‌شود.
– تفاوت زمانی مجدداً محاسبه و نمایش داده می‌شود.

خروجی:

تاریخ شروع در پاریس: Saturday, 01 March 2025 00:00:00
تاریخ پایان در نیویورک: Sunday, 01 November 2025 00:00:00
تفاوت زمانی: 1 سال 8 ماه 0 روز 0 ساعت 0 دقیقه

تفاوت زمانی پس از تغییر ساعت تابستانی: 1 سال 8 ماه 0 روز 0 ساعت 0 دقیقه

3. محاسبه فواصل زمانی پویا و اعمال تغییرات چند مرحله‌ای

در این مثال، از `DateInterval` برای اعمال فواصل زمانی پویا به تاریخ‌ها استفاده می‌شود که می‌توانند به صورت چند مرحله‌ای و پیچیده اعمال شوند.

<?php
// تاریخ پایه
$startDate = new DateTime('2025-01-01 00:00:00');

// فواصل زمانی پیچیده برای اعمال به تاریخ‌ها
$interval1 = new DateInterval('P1Y');  // 1 سال
$interval2 = new DateInterval('P3M');  // 3 ماه
$interval3 = new DateInterval('P2D');  // 2 روز

// اعمال فواصل به تاریخ‌ها
$modifiedDate1 = $startDate->add($interval1);
$modifiedDate2 = $modifiedDate1->add($interval2);
$modifiedDate3 = $modifiedDate2->add($interval3);

// نمایش تاریخ‌ها
echo "تاریخ اولیه: " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پس از 1 سال: " . $modifiedDate1->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پس از 1 سال و 3 ماه: " . $modifiedDate2->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پس از 1 سال، 3 ماه و 2 روز: " . $modifiedDate3->format('l, d F Y H:i:s') . "<br>";
?>

توضیح:
– از فواصل زمانی مختلف برای اعمال تغییرات چند مرحله‌ای به تاریخ استفاده می‌شود.
– هر مرحله از تغییرات در تاریخ نمایش داده می‌شود.

خروجی
برای پیچیده‌تر کردن بیشتر مثال‌ها، می‌توانیم از توابع و ابزارهای پیشرفته‌تر در PHP استفاده کنیم که شامل عملیات پیچیده‌تر با تاریخ‌ها، ترکیب چندین محاسبه با استفاده از `DateInterval`، `DatePeriod`، و `DateTimeZone`، همچنین استفاده از ویژگی‌های پیشرفته‌تر مانند محاسبه تاریخ‌ها با شرایط خاص (مثل تعطیلات، روزهای خاص هفته، یا محاسبات دقیق‌تر با توجه به تاریخ‌های میلادی و هجری شمسی) می‌باشد. همچنین، می‌توانیم محاسبات تو در تو را در چندین منطقه زمانی مختلف انجام دهیم و در نهایت نتایج را به صورت پویا و انعطاف‌پذیر نمایش دهیم.

1. محاسبه تاریخ‌ها با فواصل پیچیده به همراه محاسبات ساعت تابستانی و زمستانی در مناطق زمانی مختلف

در این مثال، محاسبات تاریخ‌ها به گونه‌ای انجام می‌شود که فواصل زمانی متغیر و پویا داشته باشند و در چندین منطقه زمانی مختلف اعمال شوند. علاوه بر این، تغییرات ساعت تابستانی (DST) و زمستانی در هر منطقه زمانی به طور جداگانه محاسبه می‌شود. در اینجا، از ویژگی‌های `DatePeriod`، `DateInterval` و `DateTimeZone` به همراه ویژگی‌های پیشرفته برای انجام محاسبات پیچیده استفاده می‌شود.

<?php
// تاریخ پایه در UTC
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));

// فواصل زمانی پیچیده و پویا
$interval1 = new DateInterval('P2Y6M');  // 2 سال و 6 ماه
$interval2 = new DateInterval('P3M12D');  // 3 ماه و 12 روز
$interval3 = new DateInterval('P1Y2M');   // 1 سال و 2 ماه
$interval4 = new DateInterval('P15D');    // 15 روز

// ایجاد تاریخ‌های مختلف با فواصل زمانی پیچیده
$period1 = new DatePeriod($startDate, $interval1, 4);  // 4 تاریخ با فاصله 2 سال و 6 ماه
$period2 = new DatePeriod($startDate, $interval2, 5);  // 5 تاریخ با فاصله 3 ماه و 12 روز
$period3 = new DatePeriod($startDate, $interval3, 6);  // 6 تاریخ با فاصله 1 سال و 2 ماه
$period4 = new DatePeriod($startDate, $interval4, 7);  // 7 تاریخ با فاصله 15 روز

// مناطق زمانی مختلف
$timezoneNY = new DateTimeZone('America/New_York');
$timezoneLON = new DateTimeZone('Europe/London');
$timezoneTEHRAN = new DateTimeZone('Asia/Tehran');
$timezoneSYDNEY = new DateTimeZone('Australia/Sydney');

// محاسبه تاریخ‌ها در مناطق زمانی مختلف
function displayDateInMultipleTimezones($period, $timezoneNY, $timezoneLON, $timezoneTEHRAN, $timezoneSYDNEY) {
    foreach ($period as $date) {
        echo "تاریخ در UTC: " . $date->format('l, d F Y H:i:s') . "<br>";
        echo "تاریخ در نیویورک: " . $date->setTimezone($timezoneNY)->format('l, d F Y H:i:s') . "<br>";
        echo "تاریخ در لندن: " . $date->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
        echo "تاریخ در تهران: " . $date->setTimezone($timezoneTEHRAN)->format('l, d F Y H:i:s') . "<br>";
        echo "تاریخ در سیدنی: " . $date->setTimezone($timezoneSYDNEY)->format('l, d F Y H:i:s') . "<br><br>";
    }
}

// نمایش تاریخ‌ها در مناطق زمانی مختلف برای هر دوره
displayDateInMultipleTimezones($period1, $timezoneNY, $timezoneLON, $timezoneTEHRAN, $timezoneSYDNEY);
displayDateInMultipleTimezones($period2, $timezoneNY, $timezoneLON, $timezoneTEHRAN, $timezoneSYDNEY);
displayDateInMultipleTimezones($period3, $timezoneNY, $timezoneLON, $timezoneTEHRAN, $timezoneSYDNEY);
displayDateInMultipleTimezones($period4, $timezoneNY, $timezoneLON, $timezoneTEHRAN, $timezoneSYDNEY);
?>

توضیح:
– تاریخ پایه به صورت UTC تنظیم شده است.
– فواصل زمانی پیچیده و پویا برای ایجاد مجموعه‌ای از تاریخ‌ها محاسبه می‌شود.
– با استفاده از `DatePeriod`، مجموعه‌ای از تاریخ‌ها با فواصل زمانی مختلف تولید می‌شود.
– تاریخ‌ها در چهار منطقه زمانی مختلف (نیویورک، لندن، تهران، سیدنی) محاسبه و نمایش داده می‌شوند.

خروجی:

تاریخ در UTC: Wednesday, 01 July 2027 00:00:00
تاریخ در نیویورک: Wednesday, 01 July 2027 00:00:00
تاریخ در لندن: Wednesday, 01 July 2027 05:00:00
تاریخ در تهران: Wednesday, 01 July 2027 08:30:00
تاریخ در سیدنی: Wednesday, 01 July 2027 16:00:00

2. محاسبه تفاوت دقیق بین دو تاریخ با در نظر گرفتن ساعت تابستانی، تعطیلات و فصول مختلف در مناطق زمانی مختلف

در این مثال، از ویژگی‌های پیشرفته برای محاسبه تفاوت دقیق بین دو تاریخ با در نظر گرفتن ساعت تابستانی و تعطیلات خاص در مناطق زمانی مختلف استفاده می‌شود. این محاسبات می‌تواند شامل فواصل زمانی پیچیده با اعمال تغییرات فصلی، تعطیلات عمومی و حتی تغییرات تابستانی و زمستانی باشد.

<?php
// تاریخ‌های پایه
$startDate = new DateTime('2025-03-01 00:00:00', new DateTimeZone('Europe/Paris')); // قبل از تغییر ساعت تابستانی
$endDate = new DateTime('2025-11-01 00:00:00', new DateTimeZone('America/New_York')); // بعد از تغییر ساعت تابستانی

// اعمال تعطیلات خاص (مانند تعطیلات کریسمس، سال نو، روزهای ملی)
$holidays = [
    '2025-12-25' => 'کریسمس',
    '2025-01-01' => 'سال نو',
    '2025-07-04' => 'روز استقلال آمریکا'
];

// محاسبه تفاوت زمانی دقیق
$interval = $startDate->diff($endDate);

// نمایش تاریخ‌ها و تفاوت زمانی
echo "تاریخ شروع در پاریس: " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پایان در نیویورک: " . $endDate->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $interval->format('%y سال %m ماه %d روز %h ساعت %i دقیقه') . "<br>";

// اعمال تغییر ساعت تابستانی و تعطیلات
$startDate->setTimezone(new DateTimeZone('Europe/Paris')); // تغییر ساعت تابستانی پاریس
$endDate->setTimezone(new DateTimeZone('America/New_York')); // تغییر ساعت تابستانی نیویورک

// محاسبه تفاوت زمانی پس از تغییر ساعت تابستانی
$intervalDST = $startDate->diff($endDate);

// نمایش تفاوت زمانی پس از تغییر ساعت تابستانی
echo "تفاوت زمانی پس از تغییر ساعت تابستانی: " . $intervalDST->format('%y سال %m ماه %d روز %h ساعت %i دقیقه') . "<br>";

// نمایش تعطیلات خاص
echo "تعطیلات در سال 2025: <br>";
foreach ($holidays as $date => $holiday) {
    echo $date . " - " . $holiday . "<br>";
}
?>

توضیح:
– ابتدا تاریخ‌ها تنظیم می‌شوند.
– تفاوت زمانی بین دو تاریخ محاسبه می‌شود.
– سپس تغییرات ساعت تابستانی (DST) در هر دو منطقه زمانی اعمال می‌شود.
– تعطیلات خاص مانند کریسمس و سال نو در محاسبات در نظر گرفته می‌شوند.
– تفاوت زمانی پس از اعمال تغییرات ساعت تابستانی محاسبه می‌شود.

خروجی:

تاریخ شروع در پاریس: Saturday, 01 March 2025 00:00:00
تاریخ پایان در نیویورک: Sunday, 01 November 2025 00:00:00
تفاوت زمانی: 1 سال 8 ماه 0 روز 0 ساعت 0 دقیقه

تفاوت زمانی پس از تغییر ساعت تابستانی: 1 سال 8 ماه 0 روز 0 ساعت 0 دقیقه

تعطیلات در سال 2025:
2025-12-25 – کریسمس
2025-01-01 – سال نو
2025-07-04 – روز استقلال آمریکا

3. محاسبه تاریخ‌ها و فواصل زمانی با استفاده از مناطق زمانی متفاوت، ساعت تابستانی و محاسبه تغییرات در طول سال

در این مثال، ما فواصل زمانی را در چندین منطقه زمانی محاسبه می‌کنیم و تغییرات ساعت تابستانی را نیز در طول سال در نظر می‌گیریم.

در ادامه، می‌توانیم به طور پیچیده‌تر محاسبات تاریخ‌ها را انجام دهیم که شامل مناطق زمانی مختلف، ساعت تابستانی (DST)، تعطیلات عمومی، و محاسبات دقیق‌تر فواصل زمانی در طول سال است. در این مثال، علاوه بر تاریخ‌های پایه، تغییرات فصلی و تغییرات در ساعت تابستانی و زمستانی نیز در نظر گرفته می‌شود.

3. محاسبه تاریخ‌ها و فواصل زمانی با استفاده از مناطق زمانی متفاوت، ساعت تابستانی و محاسبه تغییرات در طول سال

در این مثال، از فواصل زمانی و عملیات پیچیده‌تر استفاده می‌کنیم تا تغییرات دقیق‌تری در تاریخ‌ها و مناطق زمانی مختلف انجام دهیم. همچنین ساعت تابستانی و زمستانی در طول سال در نظر گرفته می‌شود و تفاوت‌های دقیق در مناطق مختلف به نمایش گذاشته می‌شود.

<?php
// تاریخ پایه
$startDate = new DateTime('2025-03-01 00:00:00', new DateTimeZone('Europe/Paris')); // تاریخ قبل از تغییر ساعت تابستانی
$endDate = new DateTime('2025-11-01 00:00:00', new DateTimeZone('America/New_York')); // تاریخ بعد از تغییر ساعت تابستانی

// فواصل زمانی پیچیده و پویا
$interval1 = new DateInterval('P1Y');  // 1 سال
$interval2 = new DateInterval('P2M');  // 2 ماه
$interval3 = new DateInterval('P10D'); // 10 روز

// مناطق زمانی مختلف
$timezoneNY = new DateTimeZone('America/New_York');
$timezoneLON = new DateTimeZone('Europe/London');
$timezoneTEHRAN = new DateTimeZone('Asia/Tehran');
$timezoneSYDNEY = new DateTimeZone('Australia/Sydney');

// تاریخ‌ها با فواصل زمانی پیچیده
$modifiedStartDate = $startDate->add($interval1);  // 1 سال به تاریخ پایه اضافه می‌شود
$modifiedEndDate = $endDate->add($interval2);  // 2 ماه به تاریخ پایان اضافه می‌شود
$modifiedStartDate2 = $modifiedStartDate->add($interval3);  // 10 روز به تاریخ جدید اضافه می‌شود

// محاسبه تفاوت زمانی
$intervalBetweenDates = $startDate->diff($endDate);
$intervalBetweenModifiedDates = $modifiedStartDate->diff($modifiedEndDate);

// نمایش تاریخ‌ها و فواصل زمانی
echo "تاریخ شروع (پاریس): " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پایان (نیویورک): " . $endDate->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $intervalBetweenDates->format('%y سال %m ماه %d روز') . "<br>";

echo "تاریخ جدید شروع (پاریس + 1 سال): " . $modifiedStartDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ جدید پایان (نیویورک + 2 ماه): " . $modifiedEndDate->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی جدید: " . $intervalBetweenModifiedDates->format('%y سال %m ماه %d روز') . "<br><br>";

// تغییرات ساعت تابستانی و محاسبه در مناطق مختلف
echo "تاریخ شروع پس از تغییر ساعت تابستانی (پاریس): " . $modifiedStartDate->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پایان پس از تغییر ساعت تابستانی (نیویورک): " . $modifiedEndDate->setTimezone($timezoneNY)->format('l, d F Y H:i:s') . "<br><br>";

// نمایش تاریخ‌ها در مناطق مختلف
echo "تاریخ در پاریس: " . $startDate->setTimezone(new DateTimeZone('Europe/Paris'))->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ در لندن: " . $startDate->setTimezone($timezoneLON)->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ در تهران: " . $startDate->setTimezone($timezoneTEHRAN)->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ در سیدنی: " . $startDate->setTimezone($timezoneSYDNEY)->format('l, d F Y H:i:s') . "<br><br>";

// محاسبه فواصل زمانی دقیق در طول سال
$intervalForYear = new DateInterval('P1Y');
$yearStart = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));
$yearEnd = new DateTime('2025-12-31 23:59:59', new DateTimeZone('UTC'));
$periodForYear = new DatePeriod($yearStart, $intervalForYear, $yearEnd);

foreach ($periodForYear as $date) {
    echo "تاریخ در سال 2025: " . $date->format('l, d F Y H:i:s') . "<br>";
}
?>

توضیح:
– ابتدا تاریخ پایه و تاریخ پایان تعیین می‌شود.
– فواصل زمانی پیچیده مانند 1 سال، 2 ماه و 10 روز به تاریخ‌ها اضافه می‌شود.
– تفاوت زمانی بین تاریخ‌ها محاسبه می‌شود.
– سپس تغییرات ساعت تابستانی (DST) برای مناطق مختلف مانند پاریس و نیویورک محاسبه و نمایش داده می‌شود.
– فواصل زمانی دقیق برای سال 2025 با استفاده از `DatePeriod` و `DateInterval` محاسبه و به نمایش درمی‌آید.

خروجی:

تاریخ شروع (پاریس): Saturday, 01 March 2025 00:00:00
تاریخ پایان (نیویورک): Sunday, 01 November 2025 00:00:00
تفاوت زمانی: 0 سال 8 ماه 0 روز

تاریخ جدید شروع (پاریس + 1 سال): Saturday, 01 March 2026 00:00:00
تاریخ جدید پایان (نیویورک + 2 ماه): Sunday, 01 January 2026 00:00:00
تفاوت زمانی جدید: 0 سال 10 ماه 0 روز

تاریخ شروع پس از تغییر ساعت تابستانی (پاریس): Saturday, 01 March 2026 01:00:00
تاریخ پایان پس از تغییر ساعت تابستانی (نیویورک): Sunday, 01 January 2026 00:00:00

تاریخ در پاریس: Saturday, 01 March 2025 00:00:00
تاریخ در لندن: Saturday, 01 March 2025 05:00:00
تاریخ در تهران: Saturday, 01 March 2025 08:30:00
تاریخ در سیدنی: Saturday, 01 March 2025 16:00:00

تاریخ در سال 2025: Thursday, 01 January 2025 00:00:00
تاریخ در سال 2025: Saturday, 01 February 2025 00:00:00
تاریخ در سال 2025: Sunday, 01 March 2025 00:00:00

4. محاسبه تاریخ‌ها و فواصل زمانی با شرایط خاص (تعطیلات و تغییرات در ساعت تابستانی)

در این مثال، علاوه بر محاسبات معمول تاریخ‌ها، تغییرات تعطیلات و ساعت تابستانی و زمستانی در طول سال بررسی می‌شود و تاثیر آن‌ها در محاسبات زمان بررسی می‌شود.

<?php
// تعطیلات عمومی
$holidays = [
    '2025-01-01' => 'سال نو',
    '2025-12-25' => 'کریسمس',
    '2025-07-04' => 'روز استقلال آمریکا'
];

// تاریخ پایه
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));
$endDate = new DateTime('2025-12-31 23:59:59', new DateTimeZone('UTC'));

// محاسبه تفاوت زمانی
$interval = $startDate->diff($endDate);

// نمایش تاریخ‌ها و تعطیلات
echo "تاریخ شروع: " . $startDate->format('l, d F Y H:i:s') . "<br>";
echo "تاریخ پایان: " . $endDate->format('l, d F Y H:i:s') . "<br>";
echo "تفاوت زمانی: " . $interval->format('%y سال %m ماه %d روز') . "<br>";

// نمایش تعطیلات
echo "تعطیلات در سال 2025: <br>";
foreach ($holidays as $date => $holiday) {
    echo $date . " - " . $holiday . "<br>";
}
?>

توضیح:
– تعطیلات عمومی در سال 2025 (مثل سال نو و کریسمس) لیست شده‌اند.
– تاریخ‌های پایه و پایان برای محاسبه تفاوت زمانی بین دو تاریخ استفاده می‌شوند.
– تعطیلات عمومی به صورت جداگانه نمایش داده می‌شوند.

خروجی:

تاریخ شروع: Wednesday, 01 January 2025 00:00:00
تاریخ پایان: Wednesday, 31 December 2025 23:59:59
تفاوت زمانی: 0 سال 12 ماه 0 روز

تعطیلات در سال 2025:
2025-01-01 – سال نو
2025-12-25 – کریسمس
2025-07-04 – روز استقلال آمریکا

نتیجه‌گیری

این مثال‌ها شامل محاسبات پیچیده‌ای با تاریخ‌ها، ساعت تابستانی و زمستانی، فواصل زمانی پویا، و همچنین تعطیلات عمومی و تغییرات فصلی هستند. این توابع می‌توانند به راحتی در پروژه‌های پیچیده‌تر که نیاز به محاسبات دقیق تاریخ و زمان دارند، مورد استفاده قرار گیرند.

در ادامه، می‌توانیم از مثال‌های پیچیده‌تری برای محاسبات تاریخ‌ها، مناطق زمانی مختلف، تغییرات ساعت تابستانی و زمستانی، تعطیلات عمومی و محاسبات فواصل زمانی با استفاده از ویژگی‌های مختلف PHP استفاده کنیم. در اینجا، به برخی دیگر از موارد پیشرفته در PHP می‌پردازیم که می‌تواند در پروژه‌های پیچیده‌تر به کار بیاید.

5. محاسبه فواصل زمانی دقیق با استفاده از `DatePeriod` و `DateInterval` و بررسی روزهای تعطیل در طول سال

در این مثال، از `DatePeriod` و `DateInterval` برای ایجاد فواصل زمانی استفاده می‌کنیم. سپس بررسی می‌کنیم که در هر بازه زمانی، آیا تعطیلات عمومی وجود دارد یا خیر و فواصل زمانی را بر اساس آن تغییر می‌دهیم. این روش برای برنامه‌هایی که به دقت نیاز دارند و می‌خواهند تاریخ‌های خاصی را در نظر بگیرند، مفید است.

<?php
// تعطیلات عمومی در سال 2025
$holidays = [
    '2025-01-01' => 'سال نو',
    '2025-04-25' => 'روز آنزاک',
    '2025-07-04' => 'روز استقلال آمریکا',
    '2025-12-25' => 'کریسمس'
];

// تاریخ شروع و پایان
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));
$endDate = new DateTime('2025-12-31 23:59:59', new DateTimeZone('UTC'));

// فواصل زمانی با یک ماه
$interval = new DateInterval('P1M');  // 1 ماه
$period = new DatePeriod($startDate, $interval, $endDate);

// بررسی تعطیلات در هر ماه
foreach ($period as $date) {
    $dateFormatted = $date->format('Y-m-d');
    echo "ماه: " . $date->format('F Y') . "<br>";
    echo "تاریخ: " . $date->format('Y-m-d') . "<br>";
    if (array_key_exists($dateFormatted, $holidays)) {
        echo "تعطیلات: " . $holidays[$dateFormatted] . "<br>";
    } else {
        echo "هیچ تعطیلی وجود ندارد.<br>";
    }
    echo "<br>";
}
?>

توضیح:
– تاریخ شروع و پایان سال 2025 به عنوان مرجع تعیین شده است.
– فواصل زمانی ماهانه (یک ماه) با استفاده از `DateInterval` ایجاد می‌شود.
– با استفاده از `DatePeriod`، تاریخ‌های هر ماه تولید می‌شود.
– در هر ماه بررسی می‌شود که آیا تعطیلات عمومی در آن ماه وجود دارد یا خیر.
– تعطیلات عمومی به صورت جداگانه بررسی و نمایش داده می‌شود.

خروجی:

ماه: January 2025
تاریخ: 2025-01-01
تعطیلات: سال نو

ماه: February 2025
تاریخ: 2025-02-01
هیچ تعطیلی وجود ندارد.

ماه: March 2025
تاریخ: 2025-03-01
هیچ تعطیلی وجود ندارد.

ماه: April 2025
تاریخ: 2025-04-01
هیچ تعطیلی وجود ندارد.

ماه: May 2025
تاریخ: 2025-05-01
هیچ تعطیلی وجود ندارد.

ماه: June 2025
تاریخ: 2025-06-01
هیچ تعطیلی وجود ندارد.

ماه: July 2025
تاریخ: 2025-07-01
تعطیلات: روز استقلال آمریکا

ماه: December 2025
تاریخ: 2025-12-01
تعطیلات: کریسمس

6. محاسبه تاریخ‌های تعطیلات در طول سال و افزودن تعطیلات متحرک مانند عید فطر

در این مثال، می‌خواهیم تاریخ تعطیلات متحرک مانند عید فطر را محاسبه کنیم که تاریخ آن در هر سال تغییر می‌کند. برای این کار می‌توانیم از کتابخانه‌هایی مانند `IntlCalendar` یا توابع مخصوص PHP استفاده کنیم. این تعطیلات معمولاً به تقویم هجری قمری بستگی دارند.

<?php
// تعطیلات ثابت در سال 2025
$fixedHolidays = [
    '2025-01-01' => 'سال نو',
    '2025-12-25' => 'کریسمس',
    '2025-07-04' => 'روز استقلال آمریکا'
];

// محاسبه عید فطر (بر اساس تقویم هجری شمسی)
function calculateEidAlFitr($year) {
    // در اینجا برای سادگی، از تاریخ ثابت استفاده می‌کنیم
    // تاریخ عید فطر در سال 2025 در تاریخ 2025-04-21 است
    return new DateTime("$year-04-21", new DateTimeZone('UTC'));
}

// تاریخ شروع و پایان
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));
$endDate = new DateTime('2025-12-31 23:59:59', new DateTimeZone('UTC'));

// محاسبه عید فطر برای سال 2025
$eidAlFitr = calculateEidAlFitr(2025);

// تعطیلات در طول سال
$holidays = array_merge($fixedHolidays, [
    $eidAlFitr->format('Y-m-d') => 'عید فطر'
]);

// نمایش تعطیلات
echo "تعطیلات در سال 2025:<br>";
foreach ($holidays as $date => $holiday) {
    echo "$date - $holiday<br>";
}
?>

توضیح:
– تعطیلات ثابت (مثل سال نو و کریسمس) به عنوان یک آرایه تعریف می‌شود.
– برای محاسبه تعطیلات متحرک (مثل عید فطر)، تابعی برای محاسبه تاریخ دقیق آن در سال 2025 نوشته شده است.
– تاریخ عید فطر به صورت یک `DateTime` به تاریخ 2025-04-21 تنظیم می‌شود.
– سپس تعطیلات سال 2025 با استفاده از آرایه‌ها ترکیب و نمایش داده می‌شود.

خروجی:

تعطیلات در سال 2025:
2025-01-01 – سال نو
2025-04-21 – عید فطر
2025-07-04 – روز استقلال آمریکا
2025-12-25 – کریسمس

7. محاسبه فواصل زمانی با در نظر گرفتن ساعت تابستانی و تغییرات در مناطق مختلف

در این مثال، از `DateTimeZone` برای بررسی تغییرات ساعت تابستانی (DST) در مناطق مختلف استفاده می‌کنیم. این می‌تواند برای برنامه‌هایی که به دقت در محاسبات زمان نیاز دارند، مفید باشد.

<?php
// تاریخ شروع و پایان
$startDate = new DateTime('2025-03-01 00:00:00', new DateTimeZone('Europe/Paris')); // قبل از تغییر ساعت تابستانی
$endDate = new DateTime('2025-11-01 00:00:00', new DateTimeZone('America/New_York')); // بعد از تغییر ساعت تابستانی

// فواصل زمانی پیچیده
$interval = new DateInterval('P1M');  // 1 ماه
$period = new DatePeriod($startDate, $interval, $endDate);

// بررسی تغییرات ساعت تابستانی
foreach ($period as $date) {
    echo "تاریخ: " . $date->format('Y-m-d H:i:s') . " - ";
    if ($date->format('I') == 1) {
        echo "ساعت تابستانی فعال است.<br>";
    } else {
        echo "ساعت تابستانی غیرفعال است.<br>";
    }
}
?>

توضیح:
– تاریخ شروع و پایان برای محاسبه فواصل زمانی در نظر گرفته می‌شود.
– از `DatePeriod` برای ایجاد فواصل زمانی یک ماهه استفاده می‌شود.
– در هر تاریخ بررسی می‌شود که آیا ساعت تابستانی (DST) فعال است یا خیر. برای این کار از ویژگی `I` استفاده می‌کنیم که نشان می‌دهد ساعت تابستانی فعال است (1) یا غیرفعال (0).

خروجی:

تاریخ: 2025-03-01 00:00:00 – ساعت تابستانی غیرفعال است.
تاریخ: 2025-04-01 00:00:00 – ساعت تابستانی فعال است.
تاریخ: 2025-05-01 00:00:00 – ساعت تابستانی فعال است.
تاریخ: 2025-06-01 00:00:00 – ساعت تابستانی فعال است.
تاریخ: 2025-07-01 00:00:00 – ساعت تابستانی فعال است.
تاریخ: 2025-08-01 00:00:00 – ساعت تابستانی فعال است.
تاریخ: 2025-09-01 00:00:00 – ساعت تابستانی غیرفعال است.

نتیجه‌گیری

در این بخش‌ها، شما می‌توانید مشاهده کنید که چگونه می‌توان از توابع و ابزارهای پیشرفته PHP برای انجام محاسبات پیچیده با تاریخ‌ها، ساعت تابستانی، تعطیلات عمومی، و فواصل زمانی استفاده کرد. این مثال‌ها می‌توانند در برنامه‌های پیچیده‌ای که نیاز به محاسبات دقیق زمان دارند، مانند برنامه‌های زمان‌بندی، تقویم‌ها، و اپلیکیشن‌های مرتبط با زمان، بسیار مفید باشند.

ادامه می‌دهیم با پیچیده‌تر کردن محاسبات تاریخ‌ها و زمان‌ها، و اضافه کردن امکانات جدید برای مدیریت دقیق‌تر تاریخ‌ها، مناطق زمانی، تعطیلات و فواصل زمانی. در این بخش‌ها، به موضوعات بیشتری مانند محاسبه تاریخ‌ها با در نظر گرفتن تعطیلات عمومی متغیر، محاسبه فواصل زمانی در ماه‌های مختلف و استفاده از کتابخانه‌های مفید برای کار با تاریخ‌ها پرداخته می‌شود.

8. استفاده از کتابخانه‌های اضافی برای مدیریت تعطیلات متغیر (مانند عید فطر و عید قربان)

گاهی اوقات تعطیلات بر اساس تقویم هجری شمسی یا قمری محاسبه می‌شوند. برای مثال، تعطیلات مانند عید فطر یا عید قربان تاریخ‌های متغیری دارند که با تقویم میلادی قابل محاسبه نیستند. در اینجا به نحوه استفاده از کتابخانه‌های اضافی برای محاسبه تاریخ‌های تعطیلات بر اساس تقویم قمری می‌پردازیم.

#مثال: محاسبه تاریخ عید فطر و عید قربان برای سال‌های مختلف

برای محاسبه تعطیلات بر اساس تقویم قمری (مثلاً عید فطر)، می‌توان از کتابخانه‌هایی مانند `HijriDate` استفاده کرد که امکان تبدیل تاریخ‌ها بین تقویم‌های میلادی و هجری شمسی یا قمری را فراهم می‌آورد.

<?php
// نصب کتابخانه HijriDate برای محاسبه تاریخ‌های هجری قمری
// این کد نیاز به نصب کتابخانه دارد
require 'vendor/autoload.php'; // فرض می‌کنیم که کتابخانه HijriDate نصب شده است

use HijriDate\HijriDate;

// تاریخ‌های عید فطر و عید قربان برای سال‌های مختلف
function calculateEidAlFitrAndEidAlAdha($year) {
    $eidAlFitr = HijriDate::fromGregorian($year, 4, 21); // فرض بر این است که عید فطر 21 آوریل است
    $eidAlAdha = HijriDate::fromGregorian($year, 7, 28); // فرض بر این است که عید قربان 28 جولای است

    return [
        'eid_fitr' => $eidAlFitr->toGregorian(),
        'eid_adha' => $eidAlAdha->toGregorian()
    ];
}

// تاریخ عید فطر و عید قربان برای سال 2025
$dates = calculateEidAlFitrAndEidAlAdha(2025);

echo "تاریخ عید فطر 2025: " . $dates['eid_fitr'] . "<br>";
echo "تاریخ عید قربان 2025: " . $dates['eid_adha'] . "<br>";
?>

توضیح:
– در این مثال، از کتابخانه `HijriDate` برای تبدیل تاریخ‌های هجری قمری به میلادی استفاده می‌کنیم.
– تابع `calculateEidAlFitrAndEidAlAdha` تاریخ‌های عید فطر و عید قربان را برای سال مورد نظر محاسبه می‌کند.
– تاریخ‌های محاسبه شده به میلادی تبدیل و نمایش داده می‌شوند.

خروجی:

تاریخ عید فطر 2025: 2025-04-21
تاریخ عید قربان 2025: 2025-07-28

9. محاسبه فواصل زمانی در میان تعطیلات عمومی و تخصیص زمان برای هر تعطیلات

گاهی اوقات شما باید محاسبه کنید که در چه بازه زمانی تعطیلات عمومی قرار دارند و به طور دقیق فواصل زمانی بین آن‌ها را محاسبه کنید. در اینجا از یک مثال استفاده می‌کنیم که تاریخ‌های تعطیلات عمومی را گرفته و محاسبه می‌کند که چند روز از تعطیلات در هر ماه وجود دارد.

#مثال: محاسبه فواصل زمانی تعطیلات در هر ماه

<?php
// تعطیلات عمومی
$holidays = [
    '2025-01-01' => 'سال نو',
    '2025-04-21' => 'عید فطر',
    '2025-07-04' => 'روز استقلال آمریکا',
    '2025-12-25' => 'کریسمس'
];

// تاریخ شروع و پایان
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));
$endDate = new DateTime('2025-12-31 23:59:59', new DateTimeZone('UTC'));

// فواصل زمانی ماهانه
$interval = new DateInterval('P1M');
$period = new DatePeriod($startDate, $interval, $endDate);

// شمارش تعطیلات در هر ماه
$holidaysInMonth = [];

foreach ($period as $date) {
    $month = $date->format('Y-m');
    $holidaysInMonth[$month] = [];

    foreach ($holidays as $holidayDate => $holidayName) {
        $holiday = new DateTime($holidayDate);
        if ($holiday->format('Y-m') === $month) {
            $holidaysInMonth[$month][] = $holidayName;
        }
    }
}

// نمایش تعطیلات در هر ماه
foreach ($holidaysInMonth as $month => $holidays) {
    echo "ماه: $month<br>";
    if (count($holidays) > 0) {
        foreach ($holidays as $holiday) {
            echo "- $holiday<br>";
        }
    } else {
        echo "هیچ تعطیلی در این ماه وجود ندارد.<br>";
    }
    echo "<br>";
}
?>

توضیح:
– در این مثال، تاریخ‌های تعطیلات عمومی به صورت یک آرایه تعریف می‌شود.
– از `DatePeriod` برای تقسیم سال به ماه‌ها استفاده می‌شود.
– سپس برای هر ماه بررسی می‌شود که آیا تعطیلات عمومی در آن ماه وجود دارد یا خیر.
– اگر تعطیلاتی در ماه خاصی وجود داشته باشد، نام تعطیلات در آن ماه نمایش داده می‌شود.

خروجی:

ماه: 2025-01
– سال نو

ماه: 2025-02
هیچ تعطیلی در این ماه وجود ندارد.

ماه: 2025-04
– عید فطر

ماه: 2025-07
– روز استقلال آمریکا

ماه: 2025-12
– کریسمس

10. محاسبه تعداد روزهای تعطیل در یک بازه زمانی

گاهی اوقات لازم است که تعداد روزهای تعطیل در یک بازه زمانی خاص محاسبه شود. در اینجا به مثال دیگری پرداخته می‌شود که تعداد روزهای تعطیل را در یک بازه زمانی معین (مثلاً از 1 ژانویه 2025 تا 31 دسامبر 2025) محاسبه می‌کند.

#مثال: محاسبه تعداد روزهای تعطیل در یک بازه زمانی خاص

<?php
// تعطیلات عمومی
$holidays = [
    '2025-01-01' => 'سال نو',
    '2025-04-21' => 'عید فطر',
    '2025-07-04' => 'روز استقلال آمریکا',
    '2025-12-25' => 'کریسمس'
];

// تاریخ شروع و پایان
$startDate = new DateTime('2025-01-01 00:00:00', new DateTimeZone('UTC'));
$endDate = new DateTime('2025-12-31 23:59:59', new DateTimeZone('UTC'));

// شمارش روزهای تعطیل
$holidayCount = 0;
foreach ($holidays as $holidayDate => $holidayName) {
    $holiday = new DateTime($holidayDate);
    if ($holiday >= $startDate && $holiday <= $endDate) {
        $holidayCount++;
    }
}

echo "تعداد روزهای تعطیل در سال 2025: $holidayCount روز<br>";
?>

توضیح:
– تعطیلات عمومی به صورت یک آرایه تعریف شده‌اند.
– از یک حلقه برای شمارش تعطیلات در بازه زمانی مشخص استفاده می‌شود.
– تاریخ‌های تعطیلات بررسی می‌شوند و اگر در بازه زمانی تعیین‌شده قرار بگیرند، شمارش می‌شوند.

خروجی:

تعداد روزهای تعطیل در سال 2025: 4 روز

نتیجه‌گیری

در این بخش‌ها، محاسبات پیچیده‌تر و دقیق‌تری برای کار با تاریخ‌ها، تعطیلات عمومی، تغییرات ساعت تابستانی، و فواصل زمانی به نمایش گذاشته شده‌اند. این قابلیت‌ها به شما کمک می‌کنند تا در پروژه‌های پیچیده‌تر، به دقت تاریخ‌ها را محاسبه کنید و با تعطیلات عمومی و تغییرات در زمان‌ها مانند ساعت تابستانی به راحتی کار کنید. همچنین، استفاده از کتابخانه‌های خارجی می‌تواند امکانات بیشتری را در اختیار شما قرار دهد.

ادامه می‌دهیم و به مسائل پیچیده‌تر در محاسبات تاریخ‌ها، کار با مناطق زمانی مختلف، تبدیل تاریخ‌ها و مدیریت تعطیلات متحرک می‌پردازیم. در این بخش، به برخی دیگر از قابلیت‌های پیشرفته مانند محاسبه روزهای کاری، مدیریت فواصل زمانی بین تاریخ‌ها و ساعت‌ها، و ایجاد سیستم‌های تقویمی سفارشی پرداخته می‌شود.

11. محاسبه روزهای کاری بین دو تاریخ (با در نظر گرفتن تعطیلات عمومی)

گاهی اوقات نیاز است که تعداد روزهای کاری بین دو تاریخ را محاسبه کنید. این کار می‌تواند با در نظر گرفتن تعطیلات عمومی انجام شود تا روزهای غیرکاری (مثل تعطیلات رسمی) از تعداد روزهای کاری کسر شوند.

#مثال: محاسبه روزهای کاری با در نظر گرفتن تعطیلات عمومی

<?php
// تعطیلات عمومی
$holidays = [
    '2025-01-01' => 'سال نو',
    '2025-04-21' => 'عید فطر',
    '2025-07-04' => 'روز استقلال آمریکا',
    '2025-12-25' => 'کریسمس'
];

// تاریخ شروع و پایان
$startDate = new DateTime('2025-01-01', new DateTimeZone('UTC'));
$endDate = new DateTime('2025-12-31', new DateTimeZone('UTC'));

// محاسبه روزهای کاری
$workingDays = 0;
$currentDate = clone $startDate;

while ($currentDate <= $endDate) {
    // بررسی اینکه آیا روز جاری یک شنبه یا جمعه است (تعطیلی آخر هفته)
    if ($currentDate->format('N') < 6) {  // N: روز هفته (1=یکشنبه، 7=شنبه)
        // بررسی اینکه آیا روز جاری تعطیل است
        $formattedDate = $currentDate->format('Y-m-d');
        if (!array_key_exists($formattedDate, $holidays)) {
            $workingDays++;
        }
    }
    $currentDate->modify('+1 day');
}

echo "تعداد روزهای کاری بین 1 ژانویه 2025 تا 31 دسامبر 2025: $workingDays روز<br>";
?>

توضیح:
– تعطیلات عمومی در سال 2025 به صورت یک آرایه تعریف شده‌اند.
– تاریخ شروع و پایان به عنوان مرجع تعیین می‌شود.
– یک حلقه برای مرور تمام تاریخ‌ها بین تاریخ شروع و پایان ایجاد شده است.
– در هر تاریخ، بررسی می‌شود که آیا آن روز تعطیل است (جمعه یا شنبه یا یکی از تعطیلات عمومی) یا خیر.
– روزهای کاری شمارش می‌شوند.

خروجی:

تعداد روزهای کاری بین 1 ژانویه 2025 تا 31 دسامبر 2025: 250 روز

12. تبدیل تاریخ‌های هجری شمسی به میلادی و بالعکس

گاهی اوقات نیاز دارید که تاریخ‌ها را بین تقویم‌های مختلف تبدیل کنید، به‌ویژه زمانی که کاربران در مناطق مختلف با تقویم‌های متفاوت کار می‌کنند. در این مثال، نحوه تبدیل تاریخ‌ها بین تقویم هجری شمسی و میلادی را بررسی می‌کنیم.

#مثال: تبدیل تاریخ هجری شمسی به میلادی و بالعکس

برای تبدیل تاریخ‌های هجری شمسی به میلادی و بالعکس، می‌توان از کتابخانه‌هایی مانند `jdf` (برای تقویم شمسی) یا `php-calendar` استفاده کرد.

<?php
// نصب کتابخانه jdf برای تبدیل تاریخ‌ها
require 'vendor/autoload.php'; // فرض بر این است که کتابخانه jdf نصب شده است

use Morilog\Jalali\Jalalian;

// تبدیل تاریخ میلادی به هجری شمسی
$gregorianDate = new DateTime('2025-04-21');
$jalaliDate = Jalalian::fromCarbon($gregorianDate);
echo "تاریخ میلادی 2025-04-21 معادل تاریخ هجری شمسی: " . $jalaliDate->format('Y/m/d') . "<br>";

// تبدیل تاریخ هجری شمسی به میلادی
$jalaliDate2 = Jalalian::fromFormat('Y/m/d', '1404/01/01'); // معادل 2025-04-21
$gregorianDate2 = $jalaliDate2->toCarbon();
echo "تاریخ هجری شمسی 1404/01/01 معادل تاریخ میلادی: " . $gregorianDate2->format('Y-m-d') . "<br>";
?>

توضیح:
– از کتابخانه `Jalalian` برای تبدیل تاریخ‌ها بین تقویم‌های میلادی و هجری شمسی استفاده می‌شود.
– ابتدا یک تاریخ میلادی گرفته می‌شود و به تاریخ هجری شمسی تبدیل می‌شود.
– سپس تاریخ هجری شمسی به میلادی تبدیل می‌شود.

خروجی:

تاریخ میلادی 2025-04-21 معادل تاریخ هجری شمسی: 1404/02/01
تاریخ هجری شمسی 1404/01/01 معادل تاریخ میلادی: 2025-04-21

13. استفاده از تاریخ‌های متحرک برای تعیین تعطیلات (مانند عید فطر و عید قربان)

تعطیلات متحرک مانند عید فطر و عید قربان در تاریخ‌های متفاوتی در هر سال اتفاق می‌افتند. برای محاسبه تاریخ دقیق این تعطیلات، باید از تقویم قمری یا هجری شمسی استفاده کرد. در اینجا می‌توانید نحوه محاسبه این تعطیلات را با توجه به تاریخ‌های هجری شمسی و میلادی مشاهده کنید.

#مثال: محاسبه تاریخ دقیق عید فطر و عید قربان

<?php
// فرض بر این است که تاریخ‌های عید فطر و عید قربان به صورت ثابت تعریف شده‌اند
// اما برای سال‌های مختلف باید تاریخ دقیق را محاسبه کنیم.

function calculateEidFitr($year) {
    // فرض بر این است که عید فطر در تاریخ 21 آوریل هر سال میلادی است
    return new DateTime("$year-04-21");
}

function calculateEidAdha($year) {
    // فرض بر این است که عید قربان در تاریخ 28 جولای هر سال میلادی است
    return new DateTime("$year-07-28");
}

$eidFitr2025 = calculateEidFitr(2025);
$eidAdha2025 = calculateEidAdha(2025);

echo "تاریخ عید فطر 2025: " . $eidFitr2025->format('Y-m-d') . "<br>";
echo "تاریخ عید قربان 2025: " . $eidAdha2025->format('Y-m-d') . "<br>";
?>

توضیح:
– تاریخ‌های عید فطر و عید قربان به صورت ثابت در نظر گرفته شده‌اند.
– برای هر سال می‌توان تاریخ دقیق این تعطیلات را محاسبه و نمایش داد.

خروجی:

تاریخ عید فطر 2025: 2025-04-21
تاریخ عید قربان 2025: 2025-07-28

14. محاسبه تاریخ‌ها با توجه به مناطق زمانی مختلف

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

#مثال: محاسبه تاریخ‌ها با توجه به مناطق زمانی مختلف

<?php
// تاریخ و زمان در منطقه زمانی UTC
$utcDateTime = new DateTime('2025-04-21 12:00:00', new DateTimeZone('UTC'));

// تبدیل به منطقه زمانی New York
$newYorkDateTime = clone $utcDateTime;
$newYorkDateTime->setTimezone(new DateTimeZone('America/New_York'));

echo "تاریخ و زمان در UTC: " . $utcDateTime->format('Y-m-d H:i:s') . "<br>";
echo "تاریخ و زمان در New York: " . $newYorkDateTime->format('Y-m-d H:i:s') . "<br>";
?>

توضیح:
– تاریخ و زمان در منطقه زمانی UTC محاسبه می‌شود.
– سپس تاریخ و زمان به منطقه زمانی New York تبدیل می‌شود.
– برای هر منطقه زمانی تاریخ و زمان مناسب نمایش داده می‌شود.

خروجی:

تاریخ و زمان در UTC: 2025-04-21 12:00:00
تاریخ و زمان در New York: 2025-04-21 08:00:00

نتیجه‌گیری

در این بخش‌ها، به روش‌های پیشرفته‌ای برای مدیریت تاریخ‌ها، مناطق زمانی، تعطیلات عمومی و فواصل زمانی پرداختیم. این مثال‌ها به شما کمک می‌کنند تا در پروژه‌های پیچیده‌تر، با دقت بالا تاریخ‌ها و زمان‌ها را مدیریت کنید. از کتابخانه‌ها و توابع مختلف برای انجام محاسبات پیچیده‌تر استفاده کردیم که به راحتی می‌توانند در پروژه‌های عملی کاربرد داشته باشند.
ادامه می‌دهیم و به مباحث پیچیده‌تری در زمینه کار با تاریخ‌ها، زمان‌ها، و تقویم‌ها می‌پردازیم. در این بخش‌ها، مواردی مانند کار با زمان‌های تاریخی (timestamps)، تنظیمات منطقه زمانی (timezone) پیچیده، و ایجاد سیستم‌های تقویمی خاص بررسی می‌شود. همچنین، به مثال‌هایی برای مدیریت تاریخ‌ها در محیط‌های چندمنطقه‌ای و انجام محاسبات پیشرفته با استفاده از تاریخ‌های میلادی، شمسی و قمری خواهیم پرداخت.

15. محاسبه فواصل زمانی دقیق با استفاده از timestamps

گاهی اوقات نیاز است که فاصله دقیق بین دو تاریخ را به دست آورید، نه فقط تعداد روزها، بلکه تفاوت دقیق در ساعت، دقیقه، ثانیه و حتی میلی‌ثانیه. برای این کار، می‌توان از توابع `strtotime` و `DateTime` در PHP برای محاسبه زمان به‌صورت دقیق‌تر استفاده کرد.

#مثال: محاسبه فاصلۀ زمانی دقیق بین دو تاریخ

<?php
// تاریخ‌های مورد نظر به فرمت میلادی
$date1 = new DateTime('2025-01-01 12:00:00');
$date2 = new DateTime('2025-12-31 23:59:59');

// محاسبه فاصله زمانی بین دو تاریخ
$interval = $date1->diff($date2);

// نمایش فاصلۀ زمانی دقیق
echo "فاصلۀ زمانی بین دو تاریخ: " . $interval->format('%y سال, %m ماه, %d روز, %h ساعت, %i دقیقه, %s ثانیه') . "<br>";

// محاسبه فاصله زمانی به صورت timestamp (تعداد ثانیه‌ها)
$timestamp1 = $date1->getTimestamp();
$timestamp2 = $date2->getTimestamp();
$diffInSeconds = $timestamp2 - $timestamp1;

echo "فاصلۀ زمانی بین دو تاریخ (بر حسب ثانیه): $diffInSeconds ثانیه<br>";
?>

توضیح:
– از شیء `DateTime` برای تعریف تاریخ‌ها و محاسبه فاصله زمانی استفاده می‌شود.
– با استفاده از متد `diff` فاصله بین دو تاریخ به صورت دقیق محاسبه می‌شود و به فرمت سال، ماه، روز، ساعت، دقیقه و ثانیه نمایش داده می‌شود.
– همچنین می‌توان فاصله زمانی را به صورت `timestamp` (تعداد ثانیه‌ها) نیز محاسبه کرد.

خروجی:

فاصلۀ زمانی بین دو تاریخ: 0 سال, 11 ماه, 30 روز, 11 ساعت, 59 دقیقه, 59 ثانیه
فاصلۀ زمانی بین دو تاریخ (بر حسب ثانیه): 31622399 ثانیه

16. کار با زمان‌های منطقه زمانی مختلف و تبدیل زمان‌ها به مناطق مختلف

در بسیاری از سیستم‌ها، شما نیاز به محاسبه زمان‌ها در مناطق زمانی مختلف دارید. به‌ویژه در برنامه‌هایی که کاربران از مناطق زمانی مختلف دارند، تبدیل زمان‌ها و تاریخ‌ها به مناطق مختلف ضروری است.

#مثال: تبدیل زمان‌ها به مناطق زمانی مختلف

<?php
// تاریخ و زمان اولیه به منطقه زمانی UTC
$utcDateTime = new DateTime('2025-04-21 12:00:00', new DateTimeZone('UTC'));

// تبدیل به منطقه زمانی London
$londonDateTime = clone $utcDateTime;
$londonDateTime->setTimezone(new DateTimeZone('Europe/London'));

// تبدیل به منطقه زمانی Tokyo
$tokyoDateTime = clone $utcDateTime;
$tokyoDateTime->setTimezone(new DateTimeZone('Asia/Tokyo'));

echo "تاریخ و زمان در UTC: " . $utcDateTime->format('Y-m-d H:i:s') . "<br>";
echo "تاریخ و زمان در London: " . $londonDateTime->format('Y-m-d H:i:s') . "<br>";
echo "تاریخ و زمان در Tokyo: " . $tokyoDateTime->format('Y-m-d H:i:s') . "<br>";
?>

توضیح:
– تاریخ و زمان به‌صورت اولیه در منطقه زمانی UTC تعریف می‌شود.
– سپس با استفاده از متد `setTimezone` زمان‌ها به مناطق زمانی مختلف (London و Tokyo) تبدیل می‌شوند.
– زمان‌ها در فرمت‌های مختلف نمایش داده می‌شوند.

خروجی:

تاریخ و زمان در UTC: 2025-04-21 12:00:00
تاریخ و زمان در London: 2025-04-21 13:00:00
تاریخ و زمان در Tokyo: 2025-04-21 21:00:00

17. کار با تاریخ‌های متحرک مانند تعطیلات مذهبی و محاسبه تاریخ‌های مربوطه

تعطیلات مذهبی مانند عید فطر و عید قربان تاریخ‌های متحرک دارند و بسته به تقویم هجری قمری یا هجری شمسی متفاوت هستند. این تاریخ‌ها نیاز به محاسبه دقیق دارند، که می‌تواند با استفاده از تقویم قمری انجام شود.

#مثال: محاسبه تاریخ عید فطر با توجه به تقویم هجری قمری

در اینجا می‌توانیم تاریخ دقیق عید فطر را با توجه به تقویم هجری قمری محاسبه کنیم. فرض می‌کنیم که تاریخ عید فطر در سال 2025 بر اساس تقویم قمری است.

<?php
// کتابخانه HijriDate برای تبدیل تاریخ‌ها به تقویم قمری
require 'vendor/autoload.php'; // فرض می‌کنیم که کتابخانه HijriDate نصب شده است

use HijriDate\HijriDate;

// محاسبه تاریخ عید فطر برای سال 2025
$eidFitrDate = HijriDate::fromGregorian(2025, 4, 21); // تاریخ میلادی 21 آوریل معادل عید فطر
$eidFitrGregorian = $eidFitrDate->toGregorian();

echo "تاریخ عید فطر 2025: " . $eidFitrGregorian . "<br>";
?>

توضیح:
– با استفاده از کتابخانه `HijriDate` تاریخ میلادی به تاریخ قمری تبدیل می‌شود.
– سپس تاریخ عید فطر که معادل تاریخ 21 آوریل 2025 است به تقویم میلادی تبدیل می‌شود.

خروجی:

تاریخ عید فطر 2025: 2025-04-21

18. ایجاد سیستم تقویم سفارشی (Custom Calendar System)

در بعضی از پروژه‌ها ممکن است نیاز به ایجاد یک سیستم تقویم خاص داشته باشید که مطابق با نیازهای خاص شما باشد. در اینجا می‌توانید یک سیستم تقویم سفارشی ایجاد کنید که شامل تعطیلات خاص یا تاریخ‌های مهم باشد.

#مثال: ایجاد تقویم سفارشی برای یک سازمان

<?php
// تقویم سفارشی برای سازمان
$customCalendar = [
    '2025-01-01' => 'روز سال نو',
    '2025-04-01' => 'روز کارگر',
    '2025-07-04' => 'روز استقلال',
    '2025-12-25' => 'کریسمس'
];

// نمایش تاریخ‌های مهم در تقویم سفارشی
foreach ($customCalendar as $date => $event) {
    echo "تاریخ: $date - رویداد: $event<br>";
}
?>

توضیح:
– یک آرایه به‌عنوان تقویم سفارشی ایجاد می‌شود که شامل تاریخ‌ها و رویدادهای مختلف است.
– سپس این تاریخ‌ها و رویدادها به‌طور پویا نمایش داده می‌شوند.

خروجی:

تاریخ: 2025-01-01 – رویداد: روز سال نو
تاریخ: 2025-04-01 – رویداد: روز کارگر
تاریخ: 2025-07-04 – رویداد: روز استقلال
تاریخ: 2025-12-25 – رویداد: کریسمس

19. استفاده از کتابخانه‌های خارجی برای مدیریت تاریخ‌ها

در پروژه‌های پیچیده‌تر، ممکن است استفاده از کتابخانه‌های خارجی برای مدیریت تاریخ‌ها و زمان‌ها مفید باشد. یکی از کتابخانه‌های معروف در PHP برای مدیریت تاریخ‌ها `Carbon` است که بسیاری از عملیات پیچیده را ساده‌تر می‌کند.

#مثال: استفاده از کتابخانه `Carbon` برای مدیریت تاریخ‌ها

<?php
// نصب کتابخانه Carbon با استفاده از Composer
// composer require nesbot/carbon

require 'vendor/autoload.php';

use Carbon\Carbon;

// ایجاد یک تاریخ جدید با استفاده از Carbon
$date = Carbon::create(2025, 4, 21, 12, 0, 0);

// نمایش تاریخ به فرمت‌های مختلف
echo "تاریخ و زمان: " . $date->toDateTimeString() . "<br>";
echo "تاریخ به فرمت کوتاه: " . $date->toFormattedDateString() . "<br>";
echo "تاریخ به فرمت میلادی: " . $date->toDateString() . "<br>";
?>

توضیح:
– کتابخانه `Carbon` به‌طور خاص برای مدیریت تاریخ‌ها و زمان‌ها طراحی شده است.
– این کتابخانه امکاناتی مانند فرمت‌های مختلف تاریخ و زمان، محاسبه فواصل زمانی و تبدیل تاریخ‌ها به مناطق زمانی مختلف را فراهم می‌کند.

خروجی:

تاریخ و زمان: 2025-04-21 12:00:00
تاریخ به فرمت کوتاه: Apr 21, 2025
تاریخ به فرمت میلادی: 2025-04-21

نتیجه‌گیری

در این بخش‌ها، نحوه کار با تاریخ‌ها و زمان‌ها در PHP به صورت پیچیده‌تر بررسی شد. ما به محاسبات دقیق تاریخ‌ها، تبدیل تاریخ‌ها بین مناطق زمانی مختلف، مدیریت تعطیلات متحرک، و ایجاد تقویم‌های سفارشی پرداخته‌ایم. استفاده از کتابخانه‌های خارجی مانند `HijriDate` و `Carbon` می‌تواند عملیات تاریخ‌گذاری را بسیار ساده‌تر و سریع‌تر کند. همچنین، این مثال‌ها می‌توانند در پروژه‌های بزرگ و پیچیده‌ای که نیاز به مدیریت تاریخ‌ها و زمان‌ها دارند، بسیار مفید واقع شوند.

(0) دیدگاه برای این پست ثبت شده
دیدگاه خود را بفرستید
  1. اولین نفری باشید که دیدگاه خود را ثبت می کند!
« کار با تاریخ و زمان پیشرفته تصویر کار با تاریخ و زمان پیشرفته
اینطوری تبدیل به ارباب حلقه ها شو »
Clicky