วันที่และเวลาใน WordPress

การใช้วันที่และเวลาใน 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+0700

iso8601_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:00

date/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 am

date_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 am

my choice: ธันวาคม 3, 2018 7:00 am (+07:00)

ฟังก์ชั่นไหนจะเอามาใช้อย่างไรก็ขอได้โปรดพิจารณาโดยเหมาะสมด้วยตนเองนะครับ.

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *

คุณอาจใช้แท็กHTMLและแอททริบิวต์เหล่านี้: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.