การทำงานกับ Date และ Time
ในโลกของการพัฒนาเว็บ การจัดการกับวันที่และเวลาเป็นสิ่งที่หลีกเลี่ยงไม่ได้ ไม่ว่าจะเป็นการบันทึกเวลาที่ผู้ใช้สร้างบัญชี การแสดงวันที่ของบทความ หรือการคำนวณระยะเวลาระหว่างสองเหตุการณ์ PHP มีฟังก์ชันมากมายที่ช่วยให้เราจัดการกับวันที่และเวลาได้อย่างง่ายดาย ในบทนี้ เราจะมาเรียนรู้ฟังก์ชันพื้นฐานที่จำเป็นสำหรับการทำงานกับวันที่และเวลาใน PHP
การใช้ฟังก์ชัน date() เพื่อ Format วันที่และเวลา
ฟังก์ชัน date() เป็นฟังก์ชันที่สำคัญที่สุดในการ format วันที่และเวลาใน PHP ฟังก์ชันนี้รับ parameter สองตัว: format string และ timestamp (ซึ่งเป็น optional ถ้าไม่ระบุ จะใช้เวลาปัจจุบัน) format string เป็นตัวกำหนดรูปแบบของวันที่และเวลาที่จะแสดง
รูปแบบ (Format) ที่พบบ่อย:
Y: ปี ค.ศ. แบบเต็ม (เช่น 2023)y: ปี ค.ศ. แบบย่อ (เช่น 23)m: เดือน (01-12)n: เดือน (1-12) ไม่เติม 0 ข้างหน้าM: ชื่อเดือนแบบย่อ (เช่น Jan, Feb)F: ชื่อเดือนแบบเต็ม (เช่น January, February)d: วันที่ (01-31)j: วันที่ (1-31) ไม่เติม 0 ข้างหน้าD: ชื่อวันแบบย่อ (เช่น Mon, Tue)l: ชื่อวันแบบเต็ม (เช่น Monday, Tuesday)H: ชั่วโมง (00-23)h: ชั่วโมง (01-12)i: นาที (00-59)s: วินาที (00-59)a: am หรือ pmA: AM หรือ PMT: Timezone
ตัวอย่าง:
<?php
// แสดงวันที่และเวลาปัจจุบันในรูปแบบ YYYY-MM-DD HH:MM:SS
echo date("Y-m-d H:i:s");
// แสดงวันที่ปัจจุบันในรูปแบบ วัน/เดือน/ปี
echo date("d/m/Y");
// แสดงวันที่และเวลาปัจจุบันในรูปแบบ วัน เดือน ปี ชั่วโมง:นาที:วินาที AM/PM
echo date("l F d, Y h:i:s A");
// แสดง Timezone
echo date("T");
?>
กรณีใช้งานจริง:
- แสดงวันที่สร้างบทความ:
<p>Created on: <?= date("F d, Y", strtotime($article->created_at)) ?></p> - แสดงวันที่แก้ไขล่าสุด:
<p>Last updated: <?= date("F d, Y h:i A", strtotime($article->updated_at)) ?></p>
ข้อผิดพลาดที่พบบ่อย: การลืม escape ตัวอักษรที่ต้องการแสดงผลโดยตรง เช่น ถ้าต้องการแสดง "Year: 2023" จะต้องเขียนเป็น date("Year: Y") เพราะ Y เป็น format string แต่ถ้าต้องการให้แสดงตัวอักษร Y จริงๆ ต้อง escape ด้วย backslash: date("Year: \Y") หรือใช้ single quote: date('Year: Y')
การใช้ฟังก์ชัน time() เพื่อหา Timestamp
Timestamp คือจำนวนวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970 เวลา 00:00:00 UTC ฟังก์ชัน time() จะคืนค่า timestamp ปัจจุบัน
ตัวอย่าง:
<?php
// แสดง timestamp ปัจจุบัน
echo time();
?>
กรณีใช้งานจริง:
- บันทึกเวลาที่ผู้ใช้เข้าสู่ระบบ:
$login_time = time(); - คำนวณระยะเวลาที่ผู้ใช้อยู่ในระบบ:
$session_duration = time() - $login_time; - สร้าง cache ที่หมดอายุ:
$cache_expiry = time() + (60 * 60); // หมดอายุใน 1 ชั่วโมง
ข้อผิดพลาดที่พบบ่อย: การเข้าใจผิดว่า timestamp คือวันที่และเวลาที่มนุษย์อ่านได้ Timestamp เป็นเพียงตัวเลขที่แสดงถึงจำนวนวินาที การจะแปลง timestamp เป็นวันที่และเวลาที่อ่านได้ต้องใช้ฟังก์ชัน date()
การใช้ฟังก์ชัน strtotime() เพื่อแปลง String เป็น Timestamp
ฟังก์ชัน strtotime() เป็นฟังก์ชันที่มีประโยชน์มากในการแปลง string ที่อยู่ในรูปแบบวันที่และเวลาต่างๆ เป็น timestamp ฟังก์ชันนี้รองรับรูปแบบวันที่และเวลาที่หลากหลาย
ตัวอย่าง:
<?php
// แปลง string "now" เป็น timestamp
echo strtotime("now");
// แปลง string "10 September 2000" เป็น timestamp
echo strtotime("10 September 2000");
// แปลง string "+1 week" เป็น timestamp (1 สัปดาห์จากวันนี้)
echo strtotime("+1 week");
// แปลง string "+1 day" เป็น timestamp (1 วันจากวันนี้)
echo strtotime("+1 day");
// แปลง string "next Monday" เป็น timestamp (วันจันทร์หน้า)
echo strtotime("next Monday");
// แปลง string "last Sunday" เป็น timestamp (วันอาทิตย์ที่ผ่านมา)
echo strtotime("last Sunday");
// แปลง string "2023-10-27 10:30:00" เป็น timestamp
echo strtotime("2023-10-27 10:30:00");
?>
กรณีใช้งานจริง:
- แปลงวันที่ที่รับมาจาก form:
$appointment_date = $_POST['appointment_date']; $appointment_timestamp = strtotime($appointment_date); - คำนวณวันที่ในอนาคต:
$event_date = "2023-12-25"; $reminder_date = date("Y-m-d", strtotime($event_date . " -1 week")); // เตือน 1 สัปดาห์ก่อนวัน event
ข้อผิดพลาดที่พบบ่อย:
- รูปแบบวันที่ไม่ถูกต้อง:
strtotime()อาจคืนค่าfalseถ้า string ที่ส่งเข้าไปไม่ได้อยู่ในรูปแบบที่ฟังก์ชันรองรับ ควรตรวจสอบค่าที่คืนกลับมาก่อนใช้งานเสมอ - Timezone ที่แตกต่างกัน:
strtotime()อาจตีความวันที่แตกต่างกันขึ้นอยู่กับ timezone ที่ตั้งค่าไว้ใน PHP ควรตั้งค่า timezone ให้ถูกต้องก่อนใช้งาน (ดูหัวข้อถัดไป)
การจัดการ Timezone
การจัดการ Timezone เป็นสิ่งสำคัญในการทำงานกับวันที่และเวลา โดยเฉพาะอย่างยิ่งถ้า application ของคุณมีผู้ใช้จากทั่วโลก PHP มีฟังก์ชัน date_default_timezone_set() ที่ใช้ในการตั้งค่า timezone
ตัวอย่าง:
<?php
// ตั้งค่า timezone เป็น Asia/Bangkok
date_default_timezone_set("Asia/Bangkok");
// แสดงวันที่และเวลาปัจจุบัน
echo date("Y-m-d H:i:s");
?>
ข้อควรจำ: ควรตั้งค่า timezone เพียงครั้งเดียวใน application ของคุณ โดยปกติจะตั้งค่าในไฟล์ configuration หรือไฟล์หลักของ application
รายการ Timezone ที่รองรับ: สามารถดูรายการ timezone ที่รองรับได้ที่ PHP Manual
สรุป
ในบทนี้ เราได้เรียนรู้ฟังก์ชันพื้นฐานในการจัดการกับวันที่และเวลาใน PHP ได้แก่ date(), time(), และ strtotime() นอกจากนี้ เรายังได้เรียนรู้เกี่ยวกับการจัดการ timezone ซึ่งเป็นสิ่งสำคัญในการพัฒนา application ที่รองรับผู้ใช้จากทั่วโลก ในบทถัดไป เราจะลงลึกไปอีกขั้นด้วยการใช้ DateTime object ซึ่งเป็นวิธีที่ object-oriented มากกว่าในการจัดการกับวันที่และเวลา