การใช้วันที่และเวลาใน WordPress จะขอแบ่งออกเป็นส่วนสำหรับ post และที่ไม่ใช่ post. ในส่วนสำหรับ post นั้นหลักๆจะใช้กันมากในการออกแบบธีม (Theme) ซึ่งใช้ง่าย ตัวเลือกไม่มากแต่ความสามารถมาก ต่างจากผู้ที่ไม่ได้ใช้สำหรับ post เช่นการดึงข้อมูลจากตารางที่สร้างเอง เช่น plugins มาแสดงผล เป็นต้น.
วันที่และเวลาสำหรับ Post
โดยหลักๆเราจะใช้ get_the_date()
และ get_the_time()
โดยทั้ง 2 ฟังก์ชั่นนี้จะรับค่า format ของวันหรือเวลา และค่า ID หรือ \WP_Post object มาเพื่อแสดงวันที่และเวลา ตามลำดับ. ทั้งสองฟังก์ชั่นจะผ่านการแปลเป็นภาษาตามที่ตั้งค่าไว้บน WordPress ให้เรียบร้อย. ทั้งนี้การแสดงผลออกมาโดยฟังก์ชั่นเหล่านี้จะต้องผ่านการ echo
หรือ print
อีกทีหนึ่ง.
ชื่อฟังก์ชั่น | รายละเอียด | แปลภาษา | แสดงผลเป็น GMT |
---|---|---|---|
get_the_date() |
แสดงวันที่ | ||
get_the_time() |
แสดงเวลา |
วันที่และเวลาสำหรับส่วนอื่นๆ
การแสดงผลวันที่และเวลาสำหรับส่วนอื่นๆ เช่น สำหรับดึงวันที่และเวลาจากตารางนอก posts ที่เขียนขึ้นมาเฉพาะจากปลั๊กอินต่างๆเป็นต้น. ในส่วนนี้จะมีหลาย function ให้เลือกใช้งาน เช่น mysql2date()
, get_date_from_gmt()
, iso8601_to_datetime()
, date_i18n()
. ทั้งนี้การแสดงผลออกมาโดยฟังก์ชั่นเหล่านี้จะต้องผ่านการ echo
หรือ print
อีกทีหนึ่ง.
ชื่อฟังก์ชั่น | รายละเอียด | ตัวอย่าง | แปลภาษา | แสดงผลเป็น GMT |
---|---|---|---|---|
mysql2date() |
แสดงวันเวลาจากวันที่ที่ระบุให้. | mysql2date('F j, Y g:i a', '2018-12-03 07:00:00'); จะได้ ธันวาคม 3, 2018 7:00 am |
ตามค่า parameter ที่ 3 | ตามค่า parameter ที่ 2 |
get_date_from_gmt() |
แปลงวันเวลาจากข้อมูลที่เป็น GMT 0:00 ไปเป็นวันเวลาตามการตั้งค่าเขตเวลาใน WordPress. | get_date_from_gmt('2018-12-03 00:00:00', 'Y-m-d H:i:s'); ถ้าหากตั้งเขตเวลาเป็นกรุงเทพ จะได้ 2018-12-03 07:00:00 |
||
iso8601_to_datetime() |
แปลงวันเวลาจากรูปแบบ ISO8601 ไปเป็นวันเวลาในรูปแบบของ MySQL. ทั้งนี้วันที่รูปแบบ ISO8601 จะต้องอยู่ในรูปแบบ YYYYMMDDThh:mm:ssZ เท่านั้น. | iso8601_to_datetime('20181203T07:00:00+0700'); จะได้ 2018-12-03 07:00:00 |
ตามค่า parameter ที่ 2 | |
date_i18n() |
แสดงวันเวลาโดยแปลภาษาตามการตั้งค่ารูปแบบใน WordPress. | date_i18n('F j, Y g:i a', strtotime('2018-12-03 07:00:00')); ถ้าหากตั้งภาษาเป็นไทย จะได้ ธันวาคม 3, 2018 7:00 am |
ทดสอบ
ฟังก์ชั่นวันที่และเวลาสำหรับส่วนที่ไม่ใช่ post นั้นมีค่อนข้างมาก และดูเหมือนจะเลือกยากสักหน่อยสำหรับผู้ที่จะแสดงผลวันเวลาโดยรองรับผู้ใช้จากหลายมุมโลก เช่น เว็บไซต์กำหนดเขตเวลาเป็นกรุงเทพฯ แต่ผู้ใช้เปิดดูจากลอนดอน ก็จะสับสนเวลาได้ว่าจะไม่ตรงกัน เวลาที่แสดงนั้นเป็นเวลาของ ณ ที่ใดแน่ เป็นต้น.
ในกรณีนี้ผู้เขียนได้ทดสอบการแสดงผลลัพธ์ของฟังก์ชั่นต่างๆเพื่อเปรียบเทียบ โดยสมมุติวันที่และเวลาเป็น 3 ธันวาคม 2018 (พ.ศ. 2561) เวลา 00:00:00 ณ GMT 00:00 หรือเวลา 07:00 เช้าของกรุงเทพฯ ขอให้ผู้อ่านได้เปรียบเทียบหรือทดลองนำโค้ดไปรันใน plugin/theme WordPress ดูก่อน.
สำหรับค่า argument หรือ parameter ที่ 3 ในฟังก์ชั่น date_i18n()
นั้นจะไม่มีประโยชน์เลยถ้าไม่ได้กำหนด parameter ที่ 2 เป็น false.
$dt_gmt = '2018-12-03 00:00:00';
$dt = get_date_from_gmt($dt_gmt, 'Y-m-d H:i:s');
$iso8601 = get_date_from_gmt($dt_gmt, 'Ymd\TH:i:sO');// cannot convert to timestamp using strtotime().
$iso8601_gmt = date('Ymd\TH:i:s\Z', strtotime($dt_gmt));// cannot convert to timestamp using strtotime().
$settings_datetime_format = get_option('date_format') . ' ' . get_option('time_format');
echo 'date/time GMT: ' . $dt_gmt . '<br>';
echo 'date/time local: ' . $dt . ' (use get_date_from_gmt())<br>';
echo '<br>';
echo 'iso8601 GMT: ' . $iso8601_gmt . '<br>';
echo 'iso8601 local: ' . $iso8601 . '<br>';
echo '<br>';
echo 'iso8601_to_datetime GMT, tz=user: ' . iso8601_to_datetime($iso8601_gmt) . '<br>';
echo 'iso8601_to_datetime GMT, tz=gmt: ' . iso8601_to_datetime($iso8601_gmt, 'gmt') . '<br>';
echo 'iso8601_to_datetime local, tz=user: ' . iso8601_to_datetime($iso8601) . '<br>';
echo 'iso8601_to_datetime local, tz=gmt: ' . iso8601_to_datetime($iso8601, 'gmt') . '<br>';
echo '<br>';
echo 'date/time format from settings: ' . $settings_datetime_format . '<br>';
echo '<br>';
echo 'mysql2date GMT, translate: ' . mysql2date($settings_datetime_format, $dt_gmt) . '<br>';
echo 'mysql2date GMT, not translate: ' . mysql2date($settings_datetime_format, $dt_gmt, false) . '<br>';
echo 'mysql2date local, translate: ' . mysql2date($settings_datetime_format, $dt) . '<br>';
echo 'mysql2date local, not translate: ' . mysql2date($settings_datetime_format, $dt, false) . '<br>';
echo '<br>';
echo 'date_i18n GMT, gmt=false: ' . date_i18n($settings_datetime_format, strtotime($dt_gmt)) . '<br>';
echo 'date_i18n GMT, gmt=true: ' . date_i18n($settings_datetime_format, strtotime($dt_gmt), true) . '<br>';
echo 'date_i18n local, gmt=false: ' . date_i18n($settings_datetime_format, strtotime($dt)) . '<br>';
echo 'date_i18n local, gmt=true: ' . date_i18n($settings_datetime_format, strtotime($dt), true) . '<br>';
echo '<br>';
echo 'my choice: ' . date_i18n($settings_datetime_format . ' (P)', strtotime($dt)) . '<br>';
ผลลัพธ์ก็จะได้ดังนี้.
date/time GMT: 2018-12-03 00:00:00
date/time local: 2018-12-03 07:00:00 (use get_date_from_gmt())iso8601 GMT: 20181203T00:00:00Z
iso8601 local: 20181203T07:00:00+0700iso8601_to_datetime GMT, tz=user: 2018-12-03 00:00:00
iso8601_to_datetime GMT, tz=gmt: 2018-12-03 00:00:00
iso8601_to_datetime local, tz=user: 2018-12-03 07:00:00
iso8601_to_datetime local, tz=gmt: 2018-12-03 00:00:00date/time format from settings: F j, Y g:i a
mysql2date GMT, translate: ธันวาคม 3, 2018 12:00 am
mysql2date GMT, not translate: December 3, 2018 12:00 am
mysql2date local, translate: ธันวาคม 3, 2018 7:00 am
mysql2date local, not translate: December 3, 2018 7:00 amdate_i18n GMT, gmt=false: December 3, 2018 12:00 am
date_i18n GMT, gmt=true: December 3, 2018 12:00 am
date_i18n local, gmt=false: December 3, 2018 7:00 am
date_i18n local, gmt=true: December 3, 2018 7:00 ammy choice: ธันวาคม 3, 2018 7:00 am (+07:00)
ฟังก์ชั่นไหนจะเอามาใช้อย่างไรก็ขอได้โปรดพิจารณาโดยเหมาะสมด้วยตนเองนะครับ.