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

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

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

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