จัดการกับรูปแบบของวันที่ด้วย date_format
การปรับ format ของวันที่เป็นสิ่งที่เราต้องใช้บ่อบมากๆ ไม่ว่าจะปรับ format ตอนก่อนเก็บลง database หรือตอนเอาออกมาแสดงผลที่หน้าจอก็ตาม ซึ่งใน PHP ได้เตรียม function date_format ไว้ให้เราใช้งาน ซึ่งการใช้งานนั้นเราต้องใส่ parameters 2 ตัวคือ
- date คือ วันที่และเวลาที่ต้องการนำมาจัดรูปแบบ
- format คือ รูปแบบของ output ที่เราอยากได้
date_format(date, format)
ตัวอย่าง
|
|
ผลลัพธ์จะออกมาเป็น
2023/03/09 00:00:00
จำง่ายๆว่าฟังก์ชั่น date_format() รับ parameters 2 ตัวคือ date และ format
การจัดการกับ format ของวันที่เราจะใช้ตัวอักษรแทนค่าที่เราอยากได้ ให้เราจำเป็นชุดๆ ดังนี้
การจัดรูปแบบของ วัน เดือน ปี
การจัดรูปแบบของ วัน เดือน ปี นั้นจะแยกตามกลุ่มต่างๆ ดังนี้
จัดรูปแบบของปี(Year)
ตัวอักษรที่ใช้ | รูปแบบที่เราได้ | ตัวอย่างค่าที่ได้ |
---|---|---|
Y | ปี คศ. ความยาว 4 หลัก | 2023 |
y | ปี คศ. ความยาว 2 หลัก | 23 |
จัดรูปแบบของเดือน(Month)
ตัวอักษรที่ใช้ | รูปแบบที่เราได้ | ตัวอย่างค่าที่ได้ |
---|---|---|
M | ชื่อเดือนความยาว 3 ตัวอักษร | Mar |
m | เดือน เป็นตัวเลข 2 หลักตั้งแต่ 01-12 | 03 |
g | เดือนแบบที่ไม่มี 0 นำหน้า มีค่าตั้งแต่ 1-12 | 3 |
จัดรูปแบบของวัน(Day of the Week)
ตัวอักษรที่ใช้ | รูปแบบที่เราได้ | ตัวอย่างค่าที่ได้ |
---|---|---|
D | ชื่อวัน ความยาว 3 ตัวอักษร | Thu |
l | ชื่อวันแบบเต็ม | Thursday |
จัดรูปแบบของวันที่(Day of the Month)
ตัวอักษรที่ใช้ | รูปแบบที่เราได้ | ตัวอย่างค่าที่ได้ |
---|---|---|
d | วันที่ เป็นตัวเลข 2 หลักตั้งแต่ 01-31 | 09 |
j | วันที่แบบไม่มี 0 นำหน้ามีค่าตั้งแต่ 1-31 | 9 |
การจัดรูปแบบของเวลา
การจัดรูปแบบของเวลาสามารถแยกออกเป็นกลุ่มต่างๆ ได้ดังนี้
จัดรูปแบบของชั่วโมง(Hour)
ตัวอักษรที่ใช้ | รูปแบบที่เราได้ |
---|---|
H | ชั่วโมง แบบ 24 ชั่วโมง และมี 0 นำหน้า มีค่าตั้งแต่ 00-23 |
h | ชั่วโมง แบบ 12 ขั่วโมง(ใช้ AM, PM) และมี 0 นำหน้า มีค่าตั้งแต่ 01-12 |
G | ชั่วโมง แบบ 24 ชั่วโมง และไม่มี 0 นำหน้า มีค่าตั้งแต่ 0-23 |
g | ชั่วโมง แบบ 12 ขั่วโมง(ใช้ AM, PM) และไม่มี 0 นำหน้า มีค่าตั้งแต่ 1-12 |
A | AM หรือ PM (ถ้าแสดงผลแบบ 12 ชั่วโมงเราต้องใส่ AM, PM ด้วย) |
a | am หรือ pm (ถ้าแสดงผลแบบ 12 ชั่วโมงเราต้องใส่ am, pm ด้วย) |
จัดรูปแบบของนาที(Minute)
ตัวอักษรที่ใช้ | รูปแบบที่เราได้ |
---|---|
i | นาทีแบบมี 0 นำหน้า มีค่าตั้งแต่ 00-59 |
จัดรูปแบบของวินาที(Second)
ตัวอักษรที่ใช้ | รูปแบบที่เราได้ |
---|---|
s | นาทีแบบมี 0 นำหน้า มีค่าตั้งแต่ 00-59 |
รูปแบบของวันที่และเวลาที่เราใช้บ่อยๆ
-
รูปแบบที่ใช้เก็บลง database(ISO 8601)
1 2 3 4
<? $date=date_create(); echo date_format($date,"c"); ?>
ผลลัพธ์จะออกมาเป็น
2023-03-09T00:00:00+00:00
-
แสดงเฉาะวันที่
1 2 3 4
<? $date=date_create(); echo date_format($date, "d/m/Y"); ?>
ผลลัพธ์จะออกมาเป็น
12/12/2023
-
แสดงทั้งวันที่และเวลา
1 2 3 4
<? $date=date_create(); echo date_format($date, "d/m/Y H:i:s"); ?>
ผลลัพธ์จะออกมาเป็น
12/12/2023 10:07:37
date_format แสดงปี พศ.
นี่ก็ถือว่าเป็นอีกรูปแบบที่ต้องเจอเลยทีเดียว ถ้าเราอยากได้ปี พศ.(พุทธศักราช) ต้องบวกจากปี คศ. ไปอีก 543 ปี
$currentYear = date('Y'); // ปัจจุบันเป็นปี คศ. 2023
$buddhistYear = date('Y') + 543; // ปัจจุบันเป็นปี พศ. 2566
echo 'ปีปัจจุบันเป็นปี พศ. ' . $buddhistYear
date(‘Y’) เป็นฟังก์ชั่นที่ดึงเอาปีปัจจุบันออกมา
ผลลัพธ์ที่ออกมาจะเป็น
ปีปัจจุบันเป็นปี พศ. 2566
ถ้าอยากจะแสดงผลเป็นวันที่เต็มๆ ก็ให้เขียนแบบนี้
$date = date_create();
$buddhistYear = date('Y') + 543;
echo date_format($date, "d/m/{$buddhistYear} H:i:s");
ผลลัพธ์จะออกมาเป็น
12/12/2566 10:21:59
เปลี่ยนเดือนเป็นภาษาไทย
$date = date_create();
$buddhistYear = date('Y') + 543;
// แปลงเดือนเป็นภาษาไทย
$thaiMonthName = ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'];
$month =$thaiMonthName[date('m')-1];
echo date_format($date, "d {$month} {$buddhistYear} H:i:s");
ผลลัพธ์จะออกมาเป็น
12 ธันวาคม 2566 10:48:14
จัดการกับวันที่ด้วย Carbon
การใช้งาน date() หรือ DateTime ที่มากับ PHP นั้นยังมีข้อจำกัดอยู่มากแนะนำให้ใช้ Carbon ซึ่งเป็น Open-source สำหรับจัดการกับวันที่โดยเฉพาะ สามารถดูวิธีการติดตั้งและใช้งานได้ที่นี่
ตัวอย่าง การใช้งาน Carbon
echo Carbon::now()->subMinutes(2)->diffForHumans();
ผลลัพธ์จะออกมาเป็น
2 minutes ago
เราสามารถแปลงเป็นภาษาไทยได้อย่างง่ายดายด้วยการใส่ locale(’th-TH’) เข้าไปแบบนี้
echo Carbon::now()->subMinutes(2)->locale('th_TH')->diffForHumans();
ผลลัพธ์จะออกมาเป็น
2 นาทีที่แล้ว
Carbon จะยังไม่สามารถจัดการกับปี พศ. ไม่ได้ ต้องใช้วิธีเดียวกับตัวอย่างด้านบน