การใช้วันที่และเวลาใน WordPress จะขอแบ่งออกเป็นส่วนสำหรับ post และที่ไม่ใช่ post. ในส่วนสำหรับ post นั้นหลักๆจะใช้กันมากในการออกแบบธีม (Theme) ซึ่งใช้ง่าย ตัวเลือกไม่มากแต่ความสามารถมาก ต่างจากผู้ที่ไม่ได้ใช้สำหรับ post เช่นการดึงข้อมูลจากตารางที่สร้างเอง เช่น plugins มาแสดงผล เป็นต้น.
วันที่และเวลาสำหรับ Post
โดยหลักๆเราจะใช้ get_the_date()
และ get_the_time()
โดยทั้ง 2 ฟังก์ชั่นนี้จะรับค่า format ของวันหรือเวลา และค่า ID หรือ \WP_Post object มาเพื่อแสดงวันที่และเวลา ตามลำดับ. ทั้งสองฟังก์ชั่นจะผ่านการแปลเป็นภาษาตามที่ตั้งค่าไว้บน WordPress ให้เรียบร้อย. ทั้งนี้การแสดงผลออกมาโดยฟังก์ชั่นเหล่านี้จะต้องผ่านการ echo
หรือ print
อีกทีหนึ่ง.
ชื่อฟังก์ชั่น | รายละเอียด | แปลภาษา | แปลง timezone |
---|---|---|---|
get_the_date() |
แสดงวันที่ | ||
get_the_time() |
แสดงเวลา |
วันที่และเวลาสำหรับส่วนอื่นๆ
การแสดงผลวันที่และเวลาสำหรับส่วนอื่นๆ เช่น สำหรับดึงวันที่และเวลาจากตารางนอก posts ที่เขียนขึ้นมาเฉพาะจากปลั๊กอินต่างๆเป็นต้น. ในส่วนนี้จะมีหลาย function ให้เลือกใช้งาน เช่น mysql2date()
, get_date_from_gmt()
, iso8601_to_datetime()
, date_i18n()
. ทั้งนี้การแสดงผลออกมาโดยฟังก์ชั่นเหล่านี้จะต้องผ่านการ echo
หรือ print
อีกทีหนึ่ง.
ชื่อฟังก์ชั่น | รายละเอียด | ตัวอย่าง | แปลภาษา | แปลง timezone |
---|---|---|---|---|
mysql2date() |
แสดงวันเวลาจากวันที่ที่ระบุให้. | mysql2date('F j, Y g:i a', '2018-12-03 07:00:00'); จะได้ ธันวาคม 3, 2018 7:00 am |
ตามค่า parameter ที่ 3 | |
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 |
เมื่อค่า parameter ที่ 2 เป็น false |
ทดสอบ
ฟังก์ชั่นวันที่และเวลาสำหรับส่วนที่ไม่ใช่ 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));
$settings_datetime_format = get_option('date_format') . ' ' . get_option('time_format');
echo 'original date/time (GMT): ' . $dt_gmt . '<br>';
echo '<code>get_date_from_gmt()</code> (local): ' . $dt . '<br>';
echo '<br>';
echo 'iso8601 GMT: ' . $iso8601_gmt . '<br>';
echo 'iso8601 local: ' . $iso8601 . '<br>';
echo '<br>';
echo '<code>iso8601_to_datetime()</code> GMT, timezone=user: ' . iso8601_to_datetime($iso8601_gmt) . '<br>';
echo '<code>iso8601_to_datetime()</code> GMT, timezone=gmt: ' . iso8601_to_datetime($iso8601_gmt, 'gmt') . '<br>';
echo '<code>iso8601_to_datetime()</code> local, timezone=user: ' . iso8601_to_datetime($iso8601) . '<br>';
echo '<code>iso8601_to_datetime()</code> local, timezone=gmt: ' . iso8601_to_datetime($iso8601, 'gmt') . '<br>';
echo '<br>';
echo 'date/time format from settings: <code>' . $settings_datetime_format . '</code><br>';
echo '<br>';
echo '<code>mysql2date()</code> GMT, translate=true: ' . mysql2date($settings_datetime_format, $dt_gmt) . '<br>';
echo '<code>mysql2date()</code> GMT, translate=false: ' . mysql2date($settings_datetime_format, $dt_gmt, false) . '<br>';
echo '<code>mysql2date()</code> local, translate=true: ' . mysql2date($settings_datetime_format, $dt) . '<br>';
echo '<code>mysql2date()</code> local, translate=false: ' . mysql2date($settings_datetime_format, $dt, false) . '<br>';
echo '<br>';
echo '<code>date_i18n()</code> GMT, gmt=false: ' . date_i18n($settings_datetime_format, strtotime($dt_gmt)) . '<br>';
echo '<code>date_i18n()</code> GMT, gmt=true: ' . date_i18n($settings_datetime_format, strtotime($dt_gmt), true) . '<br>';
echo '<code>date_i18n()</code> local, gmt=false: ' . date_i18n($settings_datetime_format, strtotime($dt)) . '<br>';
echo '<code>date_i18n()</code> local, gmt=true: ' . date_i18n($settings_datetime_format, strtotime($dt), true) . '<br>';
echo '<code>date_i18n()</code> <code>false</code>, gmt=false: ' . date_i18n($settings_datetime_format, false) . '<br>';
echo '<code>date_i18n()</code> <code>false</code>, gmt=true: ' . date_i18n($settings_datetime_format, false, true) . '<br>';
echo '<br>';
echo 'my choice: ' . date_i18n($settings_datetime_format . ' (P)', strtotime($dt)) . '<br>';
ผลลัพธ์ก็จะได้ดังนี้.
original date/time (GMT): 2018-12-03 00:00:00
get_date_from_gmt()
(local): 2018-12-03 07:00:00iso8601 GMT: 20181203T00:00:00Z
iso8601 local: 20181203T07:00:00+0700
iso8601_to_datetime()
GMT, timezone=user: 2018-12-03 07:00:00
iso8601_to_datetime()
GMT, timezone=gmt: 2018-12-03 00:00:00
iso8601_to_datetime()
local, timezone=user: 2018-12-03 07:00:00
iso8601_to_datetime()
local, timezone=gmt: 2018-12-03 00:00:00date/time format from settings:
F j, Y g:i a
mysql2date()
GMT, translate=true: ธันวาคม 3, 2018 12:00 am
mysql2date()
GMT, translate=false: December 3, 2018 12:00 am
mysql2date()
local, translate=true: ธันวาคม 3, 2018 7:00 am
mysql2date()
local, translate=false: December 3, 2018 7:00 am
date_i18n()
GMT, gmt=false: ธันวาคม 3, 2018 12:00 am
date_i18n()
GMT, gmt=true: ธันวาคม 3, 2018 12:00 am
date_i18n()
local, gmt=false: ธันวาคม 3, 2018 7:00 am
date_i18n()
local, gmt=true: ธันวาคม 3, 2018 7:00 am
date_i18n()
false
, gmt=false: ธันวาคม 14, 2021 1:47 pm
date_i18n()
false
, gmt=true: ธันวาคม 14, 2021 6:47 ammy choice: ธันวาคม 3, 2018 7:00 am (+07:00)
ฟังก์ชั่นไหนจะเอามาใช้อย่างไรก็ขอได้โปรดพิจารณาโดยเหมาะสมด้วยตนเองนะครับ.