การคำนวณวันที่ด้วย 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; // 10add() และ 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-01diff() ระหว่างวันที่สองวัน
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 8601add()/sub()ใช้ปรับเปลี่ยน DateTimediff()ส่งคืน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Unix Timestamps และ date()
- คลาส DateTime
- การคำนวณวันที่ด้วย DateInterval
- เขตเวลาใน PHP