ทำงานกับวันที่และเวลาใน PHP
การทำงานกับวันที่เป็นโจทย์ที่เราต้องเจออยุ่ตลอดเวลา ซึ่งใน PHP นั้นมีทั้ง date() และ DateTime มาให้ใช้ ในบทความนี้จะพาคุณไปดูความแตกต่างระหว่าง 2 ตัวนี้
date() Function
รูปแบบของการใช้งานฟังก์ชั่น date จะเป็นการเรียก function แบบง่ายๆ จะใช้งานได้ง่ายกว่า แต่ถ้า code เริ่มมีความซับซ้อนมากๆ จะแก้ไขและนำไป re-use ได้ยากกว่า DateTime ซึ่งวิธีการใช้งานจะเป็น ดังนี้
date(format, timestamp)
โดยที่เราต้องระบุ parameters เข้าไป 2 ตัวคือ
- Date format คือรูปแบบของวันที่ (ต้องใส่ ไม่ใส่ไม่ได้)
- Timestamp คือระยะห่างระหว่างวันที่ปัจจุบันกับ base date(ไม่ต้องใส่ก็ได้ ถ้าไม่ใส่จะใช้วันที่และเวลาปัจจุบัน)
ใช้ date() ในการระบุ Copyright
ใน Web Page ทุกๆหน้าเราต้องระบุ Copyright ซึ่งต้องมีปีในการกำกับถ้าเราต้องการให้ Copyright ของเราเปลี่ยนเป็นปีปัจจุบันตลอดเวลาให้เขียนแบบนี้
© 2010-<?php echo date("Y");?>
การใช้ strtotime() Function
strtotime() เป็นฟังก์ชั่นที่แปลงจาก string ไปเป็นวันที่ ซึ่งจะตรงข้ามกับ date() ที่เปลงจากวันที่เป็น string ดังนั้นถ้าเราต้องการนำข้อความที่ได้มาไปแปลงเป็นวันที่ให้เขียนแบบนี้
|
|
ผลลัพธ์จะออกมาเป็น
ข้อความนี้สร้างขึ้นเมื่อวันที่ 2023-12-15 เวลา 22:30:00
นอกจากนี้เรายังสามารถใช้คำทั่วไปแทนการใส่วันที่เข้าไป
|
|
ผลลัพธ์จะออกมาเป็น
2023-12-14 12:00:00am
2023-12-16 12:00:00am
2024-03-13 10:07:54am
การใช้งาน date_create()
เราสามารถใช้ date_create() ในการสร้าง DateTime Object ขึ้นมาได้แบบนี้
$now = date_create();
ซึ่งความแตกต่างของ date() กับ date_create() คือ date() จะ return เป็น string ดังนั้นถ้าเราอยากได้่ผลลัพธ์ของข้อความหน้าตาแบบไหน เราต้องใส่ parameter เข้าไปเลยเหมือนกับในตัวอย่างก่อนหน้า(format เป็น parameter ที่ต้องใส่)
แต่ date_create() จะ return ผลลัพธ์เป็น DateTime Object ดังนั้นเราสามารถสร้าง object ขึ้นมาได้เลยโดยที่ไม่ต้อใส่ format เข้าไปเพราะเราสามารถกำหนด format ภายหลังได้
|
|
ผลลัพธ์จะออกมาเป็น
13/12/2023
แนะนำให้ใช้ date_create() แทนการใช้งาน date()
DateTime Object
การใช้งาน DateTime Object จะเป็นการเขียนแบบ Object Oriented Programming(OOP) ซึ่งถ้าเคยเขียน OOP มาแล้วจะรู้สึกว่า DateTime นั้นอ่านและแก้ไขได้ง่ายกว่า date() หรือ date_create()
สร้าง DateTime Object
เราจะเริ่มต้นใช้งาน DateTime Object จากการสร้าง DateTime Object ขึ้นมาด้วยวิธีต่างๆ ดังนี้
-
new DateTime ขึ้นมาใหม่
$currentDate = new DateTime();
-
สร้าง DateTime ขึ้นมาจากข้อความ
$currentDate = DateTime::createFromFormat('d-m-Y', '1-3-2016');
เราต้องระบุ format ของวันที่ให้ตรงกับข้อความที่เราได้ใส่เข้าไปเป็น parameter ตัวที่ 2 ถ้าไม่ตรงกัน DateTime ที่เราได้จะไม่ถูกต้อง
-
ใช้ date_create()
$currentDate = date_create('2023-12-15');
จัดการเพิ่มหรือลบวันที่
เราสามารถขยับวันที่ของเราไปมาได้ด้วยคำสั่ง sub(กลับไปในอดีต) และ add(ไปในอนาคต) โดยที่กำหนดช่วงเวลาที่จะไปข้างหน้าและย้อนหลังด้วย DateInterval
ตัวอย่าง การหาว่าถอยหลังจากวันที่ 12 ธันวาคม 2566 ย้อนกลับไป 3 เดือนจะเป็นวันที่เท่าไหร่
|
|
ผลลัพธ์จะออกมาเป็น เดือน 9 ซึ่งย้อนกลับไป 3 เดือน
15/09/2023
ตัวอย่าง การหาว่าหลังจากผ่านจากวันที่ 12 ธันวาคม 2566 ไปข้างหน้า 3 เดือนจะเป็นวันที่เท่าไหร่
|
|
ผลลัพธ์จะออกมาเป็น วันที่ 15 มีนาคม ปี 2567
15/03/2024
DateInterval
ใน PHP เราจะกำหนดช่วงของวันเละเวลาด้วย DateInternal object โดยที่เราสามารถกำหนดช่วงของเวลาได้ด้วยรูปแบบ ดังนี้
- นำหน้าด้วย P
- ตามด้วยจำนวนที่ต้องการ
- ใส่หน่วยเข้่าไป โดยที่หน่วยของวันแลัเวลาจะใช้ตัวอักษรต่างๆ ดังนี้
ตัวอักษร ความหมาย Y จำนวนปี M จำนวนเดือน W จำนวนสัปดาห์ D จำนวนวัน H จำนวนชั่วโมง I จำนวนนาที s จำนวนวินาที
ตัวอย่าง การนิยามช่วงเวลา
$oneMonth = new DateInterval('P1M');
$threeWeeks = new DateInterval('P3W');
$threeWeeks2Days = new DateInterval('P3W2D')
// เวลาต้องคั่นด้วย T
$oneDay12Hours = new DateInterval('P1DT12H');
จัดการกับ Format ของ DateTime
เราวสามารถระบุ format ของวันที่และเวลาที่ต้องการแสดงผลด้วย method format
echo $currentDate->format('d F Y');
ดูรายละเอียดเรื่องการจัด format ของวันที่