Coding Gun

จัดการกับรูปแบบของวันที่ด้วย date_format

การปรับ format ของวันที่เป็นสิ่งที่เราต้องใช้บ่อบมากๆ ไม่ว่าจะปรับ format ตอนก่อนเก็บลง database หรือตอนเอาออกมาแสดงผลที่หน้าจอก็ตาม ซึ่งใน PHP ได้เตรียม function date_format ไว้ให้เราใช้งาน ซึ่งการใช้งานนั้นเราต้องใส่ parameters 2 ตัวคือ

  1. date คือ วันที่และเวลาที่ต้องการนำมาจัดรูปแบบ
  2. format คือ รูปแบบของ output ที่เราอยากได้
date_format(date, format)

ตัวอย่าง

1
2
3
4
<?php
    $date=date_create("2023-03-09");
    echo date_format($date,"Y/m/d H:i:s");
?>

ผลลัพธ์จะออกมาเป็น

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

รูปแบบของวันที่และเวลาที่เราใช้บ่อยๆ

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 จะยังไม่สามารถจัดการกับปี พศ. ไม่ได้ ต้องใช้วิธีเดียวกับตัวอย่างด้านบน

Phanupong Permpimol
Follow me