คลาส DateTime
สร้างและจัดการวันที่ด้วย DateTime API แบบเชิงวัตถุ
คลาส DateTime เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
DateTime เทียบกับฟังก์ชันวันที่เชิงกระบวนการ
PHP มีทั้งฟังก์ชันเชิงกระบวนการ (date(), strtotime()) และ API DateTime แบบ OO แนวทางแบบ OO เหมาะกว่าสำหรับการดำเนินการที่ซับซ้อน:
DateTime— ออบเจ็กต์วันที่และเวลาที่เปลี่ยนแปลงได้DateTimeImmutable— ไม่เปลี่ยนแปลงได้ (ปลอดภัยกว่าในโค้ดสมัยใหม่)
การสร้างออบเจ็กต์ DateTime
สร้างออบเจ็กต์ DateTime จากอินพุตหลากหลายรูปแบบ:
<?php
$now = new DateTime(); // current time
$specific = new DateTime('2024-12-25 14:30:00'); // from string
$fromTs = new DateTime('@' . time()); // from Unix timestamp
echo $now->format('Y-m-d H:i:s');
echo $specific->format('D, d M Y');
// DateTimeImmutable is safer:
$dt = new DateTimeImmutable('2024-01-01');การจัดรูปแบบด้วยเมธอดจัดรูปแบบ
จัดรูปแบบ DateTime โดยใช้อักขระรูปแบบเดียวกับฟังก์ชันวันที่:
<?php
$dt = new DateTime('2024-05-27 14:30:00');
echo $dt->format('Y-m-d'); // 2024-05-27
echo $dt->format('H:i:s'); // 14:30:00
echo $dt->format('D d M Y, H:i'); // Mon 27 May 2024, 14:30
echo $dt->format('U'); // Unix timestamp
echo $dt->format(DateTime::ATOM); // ISO 8601การปรับเปลี่ยนวันที่และเวลา
ปรับเปลี่ยน DateTime ด้วยนิพจน์สัมพันธ์:
<?php
$dt = new DateTime('2024-01-15');
$dt->modify('+1 month');
echo $dt->format('Y-m-d'); // 2024-02-15
$dt->modify('next Friday');
echo $dt->format('Y-m-d');
// DateTimeImmutable creates new object:
$dt2 = new DateTimeImmutable('2024-01-15');
$dt3 = $dt2->modify('+1 year'); // $dt2 unchangedcreateFromFormat()
แยกวิเคราะห์สตริงวันที่ด้วยรูปแบบที่ระบุ:
<?php
// Parse European date format
$dt = DateTime::createFromFormat('d/m/Y', '25/12/2024');
echo $dt->format('Y-m-d'); // 2024-12-25
// Parse with time
$dt2 = DateTime::createFromFormat('d.m.Y H:i', '27.05.2024 14:30');
echo $dt2->format('c'); // ISO 8601
// Returns false on failure:
$bad = DateTime::createFromFormat('Y-m-d', 'not-a-date');
var_dump($bad); // bool(false)การเปรียบเทียบออบเจ็กต์ DateTime
เปรียบเทียบออบเจ็กต์ DateTime ด้วยตัวดำเนินการเปรียบเทียบ:
<?php
$a = new DateTime('2024-01-01');
$b = new DateTime('2024-12-31');
var_dump($a < $b); // true
var_dump($a == $b); // false
var_dump($a > $b); // false
// Sort an array of DateTime:
$dates = [new DateTime('2024-06-01'), new DateTime('2024-01-01')];
usort($dates, fn($a, $b) => $a <=> $b);
echo $dates[0]->format('Y-m-d'); // 2024-01-01getTimestamp()
แปลง DateTime เป็นเวลาประทับแบบ Unix:
<?php
$dt = new DateTime('2024-12-25');
$ts = $dt->getTimestamp();
echo $ts; // Unix timestamp for Dec 25 2024
// setTimestamp()
$dt2 = new DateTime();
$dt2->setTimestamp($ts);
echo $dt2->format('Y-m-d'); // 2024-12-25การกำหนดส่วนประกอบวันที่และเวลา
ปรับเปลี่ยนส่วนประกอบแต่ละรายการของ DateTime:
<?php
$dt = new DateTime();
$dt->setDate(2024, 12, 25);
$dt->setTime(23, 59, 59);
echo $dt->format('Y-m-d H:i:s');
// 2024-12-25 23:59:59
// Or chain with DateTimeImmutable:
$dt = (new DateTimeImmutable())
->setDate(2024, 12, 25)
->setTime(0, 0, 0);DateTime ในทางปฏิบัติ: การตรวจสอบการสมัครสมาชิก
การใช้งานจริง: ตรวจสอบว่าการสมัครสมาชิกยังใช้งานอยู่หรือไม่:
<?php
function isSubscriptionActive(string $expiresAt): bool {
$expiry = new DateTimeImmutable($expiresAt);
$now = new DateTimeImmutable();
return $expiry > $now;
}
var_dump(isSubscriptionActive('2025-12-31')); // true
var_dump(isSubscriptionActive('2020-01-01')); // falseไลบรารี Carbon
Carbon เป็นไลบรารี PHP ยอดนิยมที่ขยาย DateTime ด้วย API แบบต่อเมธอดได้:
<?php
// After: composer require nesbot/carbon
use Carbon\Carbon;
$now = Carbon::now();
$then = Carbon::parse('2024-01-01');
echo $now->diffForHumans($then); // '5 months after'
echo $now->addWeek()->format('Y-m-d');
echo Carbon::tomorrow()->isWeekday() ? 'weekday' : 'weekend';
// Locale-aware:
Carbon::setLocale('tr');
echo $now->diffForHumans($then); // TurkishISO 8601 และ DateTime::ATOM
ใช้รูปแบบ ISO 8601 สำหรับ API และฐานข้อมูล:
<?php
$dt = new DateTime();
// ISO 8601
echo $dt->format('c'); // 2024-05-27T14:30:00+03:00
echo $dt->format(DateTime::ATOM); // same
echo $dt->format(DateTime::RFC3339); // same family
// For JSON APIs:
$json = json_encode([
'created_at' => $dt->format(DateTime::ATOM)
]);
echo $json;ตรวจสอบอย่างรวดเร็ว
ความแตกต่างสำคัญระหว่าง DateTime และ DateTimeImmutable คืออะไร?
สรุป: คลาส DateTime
สาระสำคัญของ DateTime แบบ OO:
new DateTime('date string')สำหรับการสร้างformat()สำหรับเอาต์พุตmodify()สำหรับการเปลี่ยนแปลงแบบสัมพันธ์createFromFormat()สำหรับแยกวิเคราะห์รูปแบบกำหนดเอง- ควรเลือกใช้
DateTimeImmutableเพื่อหลีกเลี่ยงข้อผิดพลาดจากการเปลี่ยนแปลงค่า - ใช้ ISO 8601 (
DateTime::ATOM) สำหรับ API
คำถามที่พบบ่อย
บทเรียน “คลาส DateTime” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คลาส DateTime” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คลาส DateTime”
สร้างและจัดการวันที่ด้วย DateTime API แบบเชิงวัตถุ คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “คลาส DateTime” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ