Apichart Nakarungutti
The Cake is a Lie
ฟังชั่นที่แสดงวัน และเวลาออกมาใน PHP จะใช้ date()
string date ( string $format[, int $timestamp = time() ] )
$format
เป็นตัวกำหนดให้แสดงวัน และ/หรือเวลาออกมาในรูปแบบต่าง ๆ สามารถรายละเอียดของตัวอักษรที่ใช้แสดงผลได้จาก function.date นอกจากจะเขียนรูปแบบเองแล้ว PHP ยังเตรียมรูปแบบที่ใช้บ่อย (ในงานเบื้องหลัง) ไว้ให้บางส่วน
DATE_RSS
: รูปแบบที่ใช้สำหรับ RSS (Sat, 24 Mar 2012 12:23:34 +0700)DATE_COOKIE
: รูปแบบที่ใช้สำหรับ cookie (Saturday, 24-Mar-12 12:23:34 ICT)DATE_W3C
: รูปแบบตาม W3C (2012-03-24T12:23:34+07:00)ส่วนที่เหลือดูจาก class.datetime
<?php
echo date('l, F d, Y');
// print: Saturday, March 24, 2012
echo date('n/j/Y G:i');
// print: 3/24/2012 13:42
echo date('H:i:s');
// print: 13:42:31
echo date(DATE_RSS);
// print: Sat, 24 Mar 2012 13:42:31 +0700
$timestamp
ใช้สร้างวันเวลาขึ้นมาแสดงผล ผ่านฟังชั่น mktime()
และ strtotime()
ผลของทั้ง 2 ฟังชั่นเหมือนกันคือได้ unix timestamp เหมือนกัน แต่ mktime()
จะรับค่าเป็นตัวเลขระบุเจาะจง ส่วน strtotime()
จะรับค่าเป็นข้อความได้
สำหรับ $now
ใน strtotime()
คือ เวลาที่เริ่มต้นคำนวณ หากระบุค่าของ $time
เป็นข้อความสัมพันธ์กับการเพิ่มลดเวลา
<?php
$t = mktime(15, 36, 0, 3, 5, 2012);
echo date('l, F d, Y H:i', $t);
// print: Monday, March 05, 2012 15:36
// tomorrow but current time
$t = mktime(date("H"), date("i"), date("s"), date("n"), date("j")+1, date("Y"));
echo date('l, F d, Y H:i') $t);
// print: Sunday, March 25, 2012 13:46
$t = strtotime("now");
echo date('l, F d, Y H:i', $t);
// print: Saturday, March 24, 2012 13:46
$t = strtotime("tomorrow");
echo date('l, F d, Y H:i', $t);
// print: Sunday, March 25, 2012 00:00
// note: time = 00:00
$t = strtotime("+24 hours");
echo date('l, F d, Y H:i', $t);
// print: Sunday, March 25, 2012 13:46
$t = strtotime("next saturday");
echo date('l, F d, Y H:i', $t);
// print: Saturday, March 31, 2012 00:00
$t = strtotime("April 1, 2012");
echo date('l, F d, Y H:i', $t);
// print: Sunday, April 01, 2012 00:00
$t_new = strtotime("+37 days 2 hours", $t);
echo date('l, F d, Y H:i', $t_new);
// print: Tuesday, May 08, 2012 02:00
แม้ว่า strtotime()
จะสามารถพิมพ์เป็นภาษาที่มนุษย์เข้าใจได้ทันที แต่ว่าให้ระวังเรื่อง วัน-เดือน-ปี ที่เป็นตัวเลขจำนวนน้อย ๆ เช่น 10-11-12
เพราะบอกยากว่าแท้ที่จริงแล้วเป็นวันที่เท่าไหร่กันแน่ ทาง PHP จะทึกทักเอาเองว่า ถ้าคั่นด้วย /
จะเป็นแบบอเมริกัน (m/d/y
) แต่ถ้าคั่นด้วย -
หรือ .
จะเป็นแบบยุโรป (d-m-y
) ทางออกที่ดีคือใช้มาตรฐาน ISO 8601 (YYYY-MM-DD
) แทน
ฟังชั่นอื่น ๆ ที่เกี่ยวกับ วัน และเวลา ยังมีอีกมากสามารถอ่านเพิ่มได้จาก ref.datetime