0Pricing
PHP Academy · บทเรียน

การคำนวณวันที่ด้วย DateInterval

เพิ่มและลบช่วงเวลาด้วย DateInterval และ modify()

การคำนวณวันที่ด้วย DateInterval เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

ภาพรวมของ DateInterval

DateInterval ใช้แทนช่วงเวลา เช่น วัน เดือน ชั่วโมง และอื่น ๆ โดยเป็นแนวทาง OO ของ PHP สำหรับการเพิ่มหรือลบเวลาออกจากออบเจ็กต์ DateTime

การสร้าง DateInterval

สร้าง DateInterval โดยใช้รูปแบบการเขียนช่วงเวลาตามมาตรฐาน ISO 8601:

<?php
// P = period, T = time separator
$oneYear  = new DateInterval('P1Y');    // 1 year
$sixMonths = new DateInterval('P6M');   // 6 months
$tenDays  = new DateInterval('P10D');   // 10 days
$twoHours = new DateInterval('PT2H');   // 2 hours (T before time)
$complex  = new DateInterval('P1Y2M3DT4H5M6S');

echo $oneYear->y;    // 1
echo $tenDays->d;    // 10

add() และ sub()

เพิ่มหรือลบ DateInterval ออกจาก DateTime:

<?php
$dt = new DateTime('2024-01-01');

$dt->add(new DateInterval('P1Y'));   // +1 year
echo $dt->format('Y-m-d');  // 2025-01-01

$dt->sub(new DateInterval('P3M'));   // -3 months
echo $dt->format('Y-m-d');  // 2024-10-01

diff() ระหว่างวันที่สองวัน

diff() ส่งคืน DateInterval ที่แสดงผลต่างระหว่างวันที่สองวัน:

<?php
$start = new DateTime('2024-01-01');
$end   = new DateTime('2024-06-15');

$diff = $start->diff($end);

echo $diff->y;  // years
echo $diff->m;  // months
echo $diff->d;  // days
echo $diff->h;  // hours
echo $diff->days; // total days: 166

ผลต่างในรูปแบบที่อ่านเข้าใจได้

จัดรูปแบบ DateInterval เพื่อแสดงผล:

<?php
$birthdate = new DateTime('1990-05-15');
$today     = new DateTime();
$age       = $birthdate->diff($today);

echo $age->y . ' years, ' . $age->m . ' months, ' . $age->d . ' days';

// Check if date is in the past
if ($diff->invert === 1) {
    echo 'Date was in the past';
}

DateInterval::createFromDateString()

สร้าง DateInterval จากสตริงภาษาธรรมชาติ:

<?php
$interval = DateInterval::createFromDateString('1 year 2 months 3 days');

$dt = new DateTime('2024-01-01');
$dt->add($interval);
echo $dt->format('Y-m-d');  // 2025-03-04

// Other examples:
DateInterval::createFromDateString('next monday');
DateInterval::createFromDateString('6 weeks');

DatePeriod — วนซ้ำตามช่วง

DatePeriod ช่วยให้คุณวนซ้ำตามช่วงวันที่ด้วยช่วงเวลาที่สม่ำเสมอ:

<?php
$start    = new DateTime('2024-01-01');
$interval = new DateInterval('P1M');  // monthly
$end      = new DateTime('2024-06-01');

$period = new DatePeriod($start, $interval, $end);

foreach ($period as $date) {
    echo $date->format('Y-m') . PHP_EOL;
}
// 2024-01, 2024-02, 2024-03, 2024-04, 2024-05

การใช้ DatePeriod สำหรับรายงานประจำสัปดาห์

สร้างจุดตรวจสอบวันที่รายสัปดาห์:

<?php
$start    = new DateTime('2024-01-01');
$interval = new DateInterval('P7D');  // weekly
$end      = new DateTime('2024-02-01');

$weeks = new DatePeriod($start, $interval, $end);
foreach ($weeks as $week) {
    echo 'Week of: ' . $week->format('Y-m-d') . PHP_EOL;
}

การเปรียบเทียบช่วงเวลา

เปรียบเทียบขนาดของ DateInterval สองรายการโดยแปลงเป็นจำนวนวันทั้งหมด:

<?php
$a = new DateTime('2024-01-01');
$b = new DateTime('2024-06-01');
$c = new DateTime('2025-01-01');

$diff1 = $a->diff($b)->days;  // 152
$diff2 = $a->diff($c)->days;  // 366

echo ($diff1 < $diff2) ? 'First interval shorter' : 'First interval longer';
// First interval shorter

การคำนวณวันทำการ

คำนวณจำนวนวันทำการระหว่างวันที่สองวัน:

<?php
function businessDays(DateTime $from, DateTime $to): int {
    $count = 0;
    $cur   = clone $from;
    while ($cur < $to) {
        $dow = (int) $cur->format('N'); // 1=Mon ... 7=Sun
        if ($dow < 6) $count++;
        $cur->modify('+1 day');
    }
    return $count;
}

$from = new DateTime('2024-05-27');
$to   = new DateTime('2024-06-07');
echo businessDays($from, $to) . ' business days';

รูปแบบวันที่หมดอายุ

รูปแบบทั่วไปสำหรับวันหมดอายุของการสมัครสมาชิกหรือโทเค็นโดยใช้ DateInterval:

<?php
function expiresAt(string $duration = 'P30D'): string {
    $dt = new DateTimeImmutable();
    return $dt->add(new DateInterval($duration))->format('Y-m-d H:i:s');
}

echo expiresAt('P30D');   // 30-day trial expiry
echo expiresAt('P1Y');    // 1-year subscription expiry
echo expiresAt('PT1H');   // 1-hour token expiry

ตรวจสอบความเข้าใจ

$dateA->diff($dateB)->days ส่งคืนค่าอะไร

ทบทวน: DateInterval

ประเด็นสำคัญ:

  • new DateInterval('P1Y2M3DT4H') — ช่วงเวลาตามมาตรฐาน ISO 8601
  • add()/sub() ใช้ปรับเปลี่ยน DateTime
  • diff() ส่งคืน DateInterval ระหว่างวันที่สองวัน
  • DatePeriod ใช้วนซ้ำตามช่วงวันที่
  • ใช้ ->days เพื่อดูจำนวนวันทั้งหมดจาก diff()
  • ตรวจสอบ ->invert เพื่อดูว่าช่วงเวลานั้นเป็นค่าลบหรือไม่

คำถามที่พบบ่อย

บทเรียน “การคำนวณวันที่ด้วย DateInterval” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การคำนวณวันที่ด้วย DateInterval” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การคำนวณวันที่ด้วย DateInterval”

เพิ่มและลบช่วงเวลาด้วย DateInterval และ modify() คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การคำนวณวันที่ด้วย DateInterval” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Unix Timestamps และ date()
  2. คลาส DateTime
  3. การคำนวณวันที่ด้วย DateInterval
  4. เขตเวลาใน PHP
← กลับไปที่ PHP Academy