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

คลาส 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 unchanged

createFromFormat()

แยกวิเคราะห์สตริงวันที่ด้วยรูปแบบที่ระบุ:

<?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-01

getTimestamp()

แปลง 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); // Turkish

ISO 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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