วันที่และเวลา ในภาษา PHP
ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับวันที่และเวลาในภาษา PHP เราจะพูดถึงการแสดงวันที่และเวลาในโปรแกรม การจัดรูปแบบการแสดงผลของเวลา และการดำเนินการอื่นๆ ที่เกี่ยวข้องกับเวลา นี่เป็นเนื้อหาในบทนี้
- การแสดงวันที่และเวลาปัจจุบัน
- การสร้างวันที่และเวลาจากค่าที่กำหนด
- การจัดรูปแบบการแสดงผลเวลา
- Timestamp
- Time zone
การแสดงวันที่และเวลาปัจจุบัน
การทำงานพื้นฐานที่พบบ่อยที่สุดในการเขียนโปรแกรมเมื่อต้องทำงานกับเวลาก็คือการแสดงวันที่และเวลาปัจจุบันออกทางหน้าจอ นี่เป็นตัวอย่างแรกของโปรแกรมสำหรับการแสดงวันที่และเวลาปัจจุบันออกทางหน้าจอในภาษา PHP
<?php
echo "UTC Time\n";
$date1 = new DateTime();
echo $date1->format(DateTime::RFC1123) . "\n";
echo "Time in Bangkok\n";
$date2 = new DateTime();
$date2->setTimezone(new DateTimeZone('Asia/Bangkok'));
echo $date2->format(DateTime::RFC1123) . "\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม ซึ่งเวลาที่แสดงควรจะสอดคล้องกับเวลาบนคอมพิวเตอร์ที่คุณกำลังรันโปรแกรมอยู่ในตอนนี้
UTC Time
Sat, 24 Oct 2020 07:41:26 +0000
Time in Bangkok
Sat, 24 Oct 2020 14:41:26 +0700
ในตัวอย่าง เป็นการแสดงเวลาปัจจุบัน UTC และเวลาของ Bangkok ออกทางหน้าจอ เวลาทั้งสองนั้นเป็นเวลาเดียวกันแต่แตกต่างกันที่เขตของเวลา
$date2 = new DateTime();
ก่อนอื่นเราได้สร้างออบเจ็คของเวลาจากคลาส DateTime
คลาสนี้ส่งค่ากลับเป็นออบเจ็คของเวลาปัจจุบันที่เราสามารถใช้สำหรับเรียกดูข้อมูลต่างๆ เกี่ยวกับเวลาได้
$date2->setTimezone(new DateTimeZone('Asia/Bangkok'));
จากนั้นเป็นการใช้เมธอด setTimezone()
สำหรับกำหนดเขตเวลาให้กับออบเจ็คของเวลาดังกล่าว เราได้กำหนดเขตของเวลาเป็น Asia/Bangkok
เนื่องจากเราต้องการดูเวลาที่กรุงเทพ ประเทศไทย
ถ้าหากเราไม่กำหนดเขตเวลาเหมือนกับในออบเจ็ค $date1
ภาษา PHP จะใช้เขตเวลาที่ได้มาจากการเรียกใช้ฟังก์ชัน date_default_timezone_get()
ซึ่งเป็นฟังก์ชันที่ใช้สำหรับรับเอาเขตเวลาปัจจุบันของระบบที่ถูกกำหนดจากการตั้งค่าของคอมพิวเตอร์ของเรา
echo $date2->format(DateTime::RFC1123) . "\n";
ในการแสดงผลเวลา เราสามารถใช้เมธอด format()
สำหรับกำหนดการแสดงผลในรูปแบบที่ต้องการได้ ในตัวอย่างเป็นการแสดงเวลาในรูปแบบ RFC 1123 โดยที่ DateTime::RFC1123
นั้นเป็นค่าคงที่สำหรับการกำหนดรูปแบบของเวลาดังกล่าว สำหรับการแสดงเวลาในรูปแบบอื่นๆ เราจะพูดถึงในอีกไม่ช้านี้
นอกจากนี้เราสามารถกำหนดเขตเวลาในตอนสร้างออบเจ็คได้ ในตัวอย่างนี้เรากำหนดเขตเวลาพร้อมกับการสร้างออบเจ็ค
<?php
$date = new DateTime("now", new DateTimeZone('Asia/Bangkok'));
echo $date->format(DateTime::RFC1123) . "\n";
ในการสร้างออบเจ็คของเวลาด้วยวิธีนี้ ทำให้เราสามารถกำหนดเขตเวลาพร้อมกับการสร้างออบเจ็ควันที่ได้โดยการกำหนดเขตเวลาในพารามิเตอร์ที่สองของคลาส สำหรับการสร้างออบเจ็คของเวลาปัจจุบันเราจะต้องส่ง "now"
เป็นพารามิเตอร์แรกของคลาส
การสร้างวันที่และเวลาจากค่าที่กำหนด
ในตัวอย่างก่อนหน้า เราได้พูดถึงการสร้างออบเจ็คของวันที่จากเวลาปัจจุบันไปแล้ว ในตัวอย่างนี้เป็นการสร้างออบเจ็คจากวันที่ที่มีอยู่ในรูปแบบของ String ที่รองรับในภาษา PHP ในการสร้างวันที่ด้วยวิธีนี้ ทำให้เราสามารถนำค่าของเวลาที่มีอยู่แล้วมาใช้งานใน PHP ได้ เช่น เวลาที่เก็บไว้ในฐานข้อมูล หรือไฟล์ เป็นต้น
นี่เป็นตัวอย่างการสร้างออบเจ็คของวันที่จาก String ในรูปแบบเวลาต่างๆ ในภาษา PHP
<?php
// ISO 8601
$date1 = new DateTime("2020-10-24T05:28:00+0000");
$date2 = new DateTime("2020-10-24T05:28:00+0700");
// RFC 1123
$date3 = new DateTime("Sat, 24 Oct 2020 05:28:00 +0700");
// RFC 850
$date4 = new DateTime("Saturday, 24-Oct-20 05:28:00 GMT+0700");
echo $date1->format(DateTime::RFC1123) . "\n";
echo $date2->format(DateTime::RFC1123) . "\n";
echo $date3->format(DateTime::RFC1123) . "\n";
echo $date4->format(DateTime::RFC1123) . "\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Sat, 24 Oct 2020 05:28:00 +0000
Sat, 24 Oct 2020 05:28:00 +0700
Sat, 24 Oct 2020 05:28:00 +0700
Sat, 24 Oct 2020 05:28:00 +0700
ในตัวอย่าง เป็นการสร้างออบเจ็คจากค่าของวันที่จากช่วงเวลาที่กำหนด โดยส่งเป็นพารามิเตอร์ของคลาส DateTime
โดยเวลานั้นต้องเป็น String ในรูปแบบของเวลามาตรฐานที่รองรับในภาษา PHP เช่น ISO 8601, RFC 1123 หรือ RFC 850 ซึ่งนี่จะแปลงค่า String ดังกล่าวเป็นออบเจ็คของวันที่พร้อมกับเขตเวลาให้กับเราอัตโนมัติ
ในกรณีที่ String ของวันที่อยู่ในรูปแบบมาตรฐาน เราสามารถใช้มันกับคอนสตรัคเตอร์ DateTime
ได้โดยตรง แต่ในบางกรณีข้อมูลที่เรามีอาจได้มาจากแหล่งอื่น หรือไม่ตรงกับรูปแบบที่รองรับ ยกตัวอย่างเช่น
$date = new DateTime("24/10/2020 05:28:00");
// Error
คำสั่งนี้จะทำให้เกิดข้อผิดพลาดขึ้นเมื่อเรานำค่าของวันที่ "24/10/2020 05:28:00"
มาสร้างออบเจ็คด้วยคอนสตรัคเตอร์ DateTime
ถึงแม้ว่ามันเป็นวันที่ที่เราสามารถอ่านและเข้าใจได้ แต่นี่เป็นรูปแบบของวันที่ที่ไม่รองรับโดยคลาส DateTime
ในภาษา PHP
เพื่อสร้างออบเจ็คของวันที่จาก String ในรูปแบบนี้ เราจะต้องทำมันด้วยเมธอด DateTime::createFromFormat()
เมธอดนี้ทำให้เราสามารถแปลงวันที่จากรูปแบบที่กำหนดเป็นออบเจ็คของวันที่ในภาษา PHP ได้ นี่เป็นตัวอย่าง
<?php
$input = "24/10/2020 05:28:00";
$format = "d/m/Y H:i:s";
$timezone = new DateTimeZone("UTC");
$date = DateTime::createFromFormat($format, $input, $timezone);
echo $date->format(DateTime::RFC1123) . "\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Sat, 24 Oct 2020 05:28:00 +0000
ในตัวอย่าง เป็นการสร้างออบเจ็คของวันที่จากรูปแบบที่กำหนดด้วยเมธอด DateTime::createFromFormat()
เมธอดนี้รับสามพารามิเตอร์สำหรับการสร้างออบเจ็คของวันที่ พารามิเตอร์แรกคือรูปแบบของวันที่ที่เราประกาศไว้ในตัวแปร $format
$input = "24/10/2020 05:28:00";
$format = "d/m/Y H:i:s";
รูปแบบของวันที่จะต้องสอดคล้องกับค่าของวันที่ในตัวแปร $input
นี่เป็นจะเป็นการบอกให้ PHP เข้าใจและแปลงมันเป็นออบเจ็คของวันที่ได้อย่างถูกต้อง สำหรับการกำหนดรูปแบบของ String เหมือนกับที่คุณเห็นใน "d/m/Y H:i:s"
เราจะพูดถึงต่อจากนี้
การจัดรูปแบบการแสดงผลเวลา
ในตัวอย่างที่ผ่านมาเราได้แสดงวันที่เพียงในรูปแบบเดียว นั่นคือในรูปแบบของ RFC 1123 อย่างไรก็ตามในภาษา PHP นั้นมีวันที่ในรูปแบบอื่นๆ ที่เราสามารถใช้สำหรับการจัดรูปแบบของวันที่ได้ นี่เป็นตัวอย่างของรูปแบบวันที่ทั้งหมดที่สามารถใช้ได้ในภาษา PHP
<?php
date_default_timezone_set('UTC');
$date = new DateTime();
echo $date->format(DateTime::ATOM) . "\n";
echo $date->format(DateTime::COOKIE) . "\n";
echo $date->format(DateTime::ISO8601) . "\n";
echo $date->format(DateTime::RFC822) . "\n";
echo $date->format(DateTime::RFC850) . "\n";
echo $date->format(DateTime::RFC1036) . "\n";
echo $date->format(DateTime::RFC1123) . "\n";
echo $date->format(DateTime::RFC7231) . "\n";
echo $date->format(DateTime::RFC2822) . "\n";
echo $date->format(DateTime::RFC3339) . "\n";
echo $date->format(DateTime::RFC3339_EXTENDED) . "\n";
echo $date->format(DateTime::RSS) . "\n";
echo $date->format(DateTime::W3C) . "\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
2020-10-24T09:33:19+00:00
Saturday, 24-Oct-2020 09:33:19 UTC
2020-10-24T09:33:19+0000
Sat, 24 Oct 20 09:33:19 +0000
Saturday, 24-Oct-20 09:33:19 UTC
Sat, 24 Oct 20 09:33:19 +0000
Sat, 24 Oct 2020 09:33:19 +0000
Sat, 24 Oct 2020 09:33:19 GMT
Sat, 24 Oct 2020 09:33:19 +0000
2020-10-24T09:33:19+00:00
2020-10-24T09:33:19.252+00:00
Sat, 24 Oct 2020 09:33:19 +0000
2020-10-24T09:33:19+00:00
ในตัวอย่าง จะเห็นว่ามีวันที่ในรูปแบบต่างๆ ที่เราสามารถใช้สำหรับจัดรูปแบบการแสดงผลของวันที่ได้ ซึ่งรูปแบบของวันที่เหล่านี้เป็นค่าคงที่ที่กำหนดไว้ภายในคลาส DateTime
ที่สามารถใช้ร่วมกับเมธอด format()
สำหรับจัดรูปแบบการแสดงผลของวันที่
แม้ว่ามันจะมีเป็นจำนวนมาก แต่ในบางครั้งนั่นอาจจะไม่ใช่รูปแบบของวันที่ที่เราต้องการใช้งาน หรือเราอาจต้องการจัดรูปแบบการแสดงผลในแบบของเราเอง ในภาษา PHP คุณสามารถทำเช่นนี้ได้ด้วยตัวกำหนดรูปแบบของวันที่ที่สามารถใช้ร่วมกับเมธอด เช่น format()
นี่เป็นตัวอย่างการจัดรูปแบบของวันที่ในรูปแบบที่กำหนดเองในภาษา PHP โดยใช้ตัวกำหนดรูปแบบวันที่มาตฐานของภาษา
<?php
$date = new DateTime();
echo $date->format("D, d M Y H:i:s O") . "\n";
echo $date->format("d-m-Y H:i:s") . "\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Sat, 24 Oct 2020 09:43:17 +0000
24-10-2020 09:43:17
ในตัวอย่าง เราได้กำหนดรูปแบบของวันที่ในรูปแบบที่กำหนดเองโดยใช้ตัวกำหนดรูปแบบการแสดงผลวันที่ในภาษา PHP กับเมธอด format()
สำหรับจัดการแสดงผล พารามิเตอร์ของเมธอดนั้นเป็น String ที่ประกอบไปด้วยการรวมกันของตัวจัดรูปแบบของวันที่
และอย่างที่คุณเห็นในตัวอย่าง ทุกตัวอักษรใน String ซึ่งเป็นตัวจัดรูปแบบวันที่นั้นมีความหมายในตัวมันเอง เช่น D
คือวันของสัปดาห์ M
คือชื่อย่อของเดือนแบบสามตัว หรือ m
คือตัวเลขสองหลักของเดือน เป็นต้น นี่จะทำให้เราสามารถจัดรูปแบบของวันทีี่เป็นแบบไหนก็ได้ตามต้องการ
สำหรับตัวจัดรูปแบบของวันที่ทั้งหมดที่สามารถใช้ได้ในภาษา PHP คุณสามารถอ่านเพิ่มเติมได้ที่ https://www.php.net/manual/en/datetime.format.php
Timestamp
Unix timestamp นั้นเป็นเวลาที่มีหน่วยเป็นวินาทีที่เริ่มนับจาก Unix Epoch (January 1 1970 00:00:00 GMT) ซึ่งในภาษา PHP เราสามารถรับเอาเวลา Timestamp ปัจจุบันจากระบบได้ด้วยฟังก์ชัน time()
ซึ่งฟังก์ชันนี้ส่งค่ากลับเป็นเวลา Timestamp ที่มีหน่วยเป็นวินาทีที่เราสามารถนำไปใช้ได้ในโปรแกรม นี่เป็นตัวอย่าง
<?php
$now = time();
echo $now . ' seconds since January 1 1970 00:00:00 GMT';
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
1603533926 seconds since January 1 1970 00:00:00 GMT
Timestamp นั้นเป็นค่าที่ระบุถึงช่วงเวลาแต่มันเพียงแสดงในรูปแบบของวินาทีตั้งแต่ 1 มกราคม 1970 และเราสามารถแปลงมันให้อยู่ในรูปแบบของเวลาใดๆ และในทางกลับกัน วันที่ก็สามารถแปลงให้อยู่ในรูปแบบของ Timestamp ได้เช่นกัน
ในภาษา PHP เราสามารถสร้างออบเจ็คของวันที่จากค่า Timestamp ได้นี่เป็นตัวอย่าง
<?php
$date = new DateTime();
$date->setTimestamp(time());
echo $date->format(DateTime::RFC1123) . "\n";
$yesterday = new DateTime();
$yesterday->setTimestamp(time() - 86400);
echo $yesterday->format(DateTime::RFC1123) . "\n";
$nextWeek = new DateTime();
$nextWeek->setTimestamp(time() + 86400 * 7);
echo $nextWeek->format(DateTime::RFC1123) . "\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Sat, 24 Oct 2020 10:11:53 +0000
Fri, 23 Oct 2020 10:11:53 +0000
Sat, 17 Oct 2020 10:11:53 +0000
ในตัวอย่าง เป็นการสร้างออบเจ็คของวันที่จากค่า Timestamp ที่ได้มาจากฟังก์ชัน time()
ในตอนแรกเราต้องสร้างออบเจ็คของวันที่ขึ้นมาก่อน จากนั้นเรียกใช้งานเมธอด setTimestamp()
เพื่อเปลี่ยนค่าของ Timestamp ให้เป็นค่าใหม่
$date->setTimestamp(time());
...
$yesterday->setTimestamp(time() - 86400);
เนื่องจากค่า Timestamp จะคงที่เสมอสำหรับช่วงเวลาใดๆ เราสามารถทำการบวกลบกับค่า Timestamp เพื่อสร้างเวลาอ้างอิงจากค่าปัจจบุันได้ ในตัวอย่างการลบค่า Timestamp ด้วย 86400
จะทำให้ได้วันที่ของเมื่อวานในเวลาเดียวกัน เนื่องจาก 86400 เป็นจำนวนของวินาทีในหนึ่งวัน
$nextWeek->setTimestamp(time() + 86400 * 7);
และเช่นเดียวกันในตัวแปร $nextWeek
เป็นการสร้างออบเจ็คของวันที่อีก 7 วันข้างหน้าโดยอ้างอิงจากค่า Timestamp ปัจจุบัน
หลังจากที่เรากำหนด Timestamp ให้กับออบเจ็คของวันที่ปัจจุบันแล้ว เราสามารถเรียกดูค่า Timestamp ได้เช่นกันโดยการเรียกใช้เมธอด getTimestamp()
นี่เป็นตัวอย่าง
$date = new DateTime("2020-10-24T05:28:00+0000");
echo $date->getTimestamp();
นี่เป็นผลลัพธ์การทำานของโปรแกรม
1603517280
ในตัวอย่าง เราได้สร้างออบเจ็คของวันที่จาก String จากนั้นเรียกดูค่า Timestamp ของวันที่ดังกล่าวด้วยเมธอด getTimestamp()
ที่ส่งค่ากลับเป็นค่าของ Timestamp ในหน่วยวินาที
เนื่องจาก Timestamp นั้นเป็นตัวเลข ดังนั้นมันมีประโยชน์ในการนำมาบวกหรือลบเพื่อสร้างเวลาอ้างอิงจากเวลาที่เราต้องการ หรือนำมาใช้คำนวณสำหรับหาผลต่างของเวลา ในตัวอย่างนี้เราจะเขียนโปรแกรมเพื่อนับว่าเหลืออีกกี่วันก่อนที่จะถึงวันคริสมาสต์ในปีนี้
<?php
$date = new DateTime("2020-10-24T00:00:00+0000");
$christmas = new DateTime("2020-12-25T00:00:00+0000");
$diff = $christmas->getTimestamp() - $date->getTimestamp();
echo $diff . " seconds or ";
echo ($diff / 86400) . " days left to Christmas!\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
5356800 seconds or 62 days left to Christmas!
ในตัวอย่าง เราได้ประกาศออบเจ็คของวันที่สองตัว ตัวแปร $date
เป็นออบเจ็คของวันที่ที่บทเรียนนี้กำลังถูกเขียนขึ้น และตัวแปร $christmas
เป็นออบเจ็คของวันคริสมาสต์ในปีนี้ เพื่อหาว่าเหลืออีกกี่วันที่จะถึงวันคริสมาสต์ เราต้องหาผลต่างของเวลาจากออบเจ็คของวันที่ทั้งสอง
$diff = $christmas->getTimestamp() - $date->getTimestamp();
เพื่อหาผลต่างของเวลา เราเพียงนำค่า Timestamp ของออบเจ็คทั้งสองมาลบกัน เราจะได้ผลต่างของเวลาในหน่วยวินาทีที่เก็บไว้ในตัวแปร $diff
echo $diff . " seconds or ";
echo ($diff / 86400) . " days left to Christmas!\n";
การแสดงค่าในหน่วยวินาทีอาจทำให้เข้าใจยาก เราสามารถแปลงวินาทีเป็นวันได้โดยการนำค่าวินาทีในตัวแปรหารด้วย 86400
ตอนนี้เราทราบแล้วว่าเหลืออีกเพียง 62 ก่อนที่จะถึงวันคริสมาสต์
Time zone
เขตเวลา (Time zone) เป็นการกำหนดเวลามาตรฐานบนภูมิภาคใดๆ ของโลกที่มีวัตถุประสงค์เพื่อใช้ในทางกฎหมาย ทางการค้า และทางสังคม สิ่งหนึ่งที่ควรให้ความสำคัญและคำนึงถึงเมื่อคุณต้องเขียนโปรแกรมเกี่ยวกับเวลาคือเขตเวลา ในภาษา PHP มีสองฟังก์ชันที่ใช้สำหรับจัดการกับเขตเวลาเริ่มต้นทั้งหมดของระบบ
date_default_timezone_get()
: รับเอาค่าเขตเวลาเริ่มต้นที่ใช้ในฟังก์ชันของวันที่และเวลาทั้งหมดในโปรแกรมdate_default_timezone_set()
: กำหนดค่าเขตเวลาเริ่มต้นที่ใช้ในฟังก์ชันของวันที่และเวลาทั้งหมดในโปรแกรม
โดยปกติเมื่อเราสร้างออบเจ็คของวันที่และไม่ได้กำหนด Timezone เขตเวลาของออบเจ็คดังกล่าวจะเป็นค่าที่ได้จากฟังก์ชัน date_default_timezone_get()
ซึ่งค่านี้มักจะได้มาจากการตั้งค่าในไฟล์ php.ini
สำหรับเว็บเซิร์ฟเวอร์ หรือเขตเวลาจากระบบปฏิบัติการ ยกตัวอย่างเช่น
<?php
$date = new DateTime();
$timezone = $date->getTimezone();
echo $timezone->getName() . "\n";
echo $date->format(DateTime::RFC1123) . "\n";
echo "Default Time zone: " . date_default_timezone_get() . "\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Europe/Berlin
Sat, 24 Oct 2020 22:35:14 +0200
Default Time zone: Europe/Berlin
ในตัวอย่าง เป็นการสร้างออบเจ็คของวันที่ จากนั้นแสดงเขตเวลาที่ได้มาจากเมธอด getTimezone()
เมธอดนี้ส่งค่ากลับเป็นออบเจ็คของเขตเวลาจากคลาส DateTimeZone
เราสามารถเรียกใช้งานเมธอด getName()
บนออบเจ็คเพื่อรับเอาชื่อของเขตเวลาได้
echo "Default Time zone: " . date_default_timezone_get() . "\n";
นอกจากนี้ เราเรียกใช้ฟังก์ชัน date_default_timezone_get()
สำหรับรับเอาชื่อของเขตเวลาเริ่มต้นที่ใช้โดย PHP นี่เป็นเขตเวลาที่จะถูกใช้ในออบเจ็คหรือฟังก์ชันของวันที่ทั้งหมดในสคริป
จะเห็นว่าชื่อของเขตเวลาที่ได้จากออบเจ็ค $timezone
นั้นตรงกับชื่อของเขตเวลาจากฟังก์ชัน date_default_timezone_get()
นั่นเป็นเพราะว่าเราไม่ได้กำหนดเขตเวลาให้กับออบเจ็ค $date
ดังนั้นเขตเวลาที่ได้จึงเป็นเขตเวลาเริ่มต้นแทน
ในภาษา PHP เราสามารถกำหนดเขตเวลาเริ่มต้นเพื่อให้ใช้ในออบเจ็คหรือฟังก์ชันของวันที่ทั้งหมดในสคริปโดยใช้ฟังก์ชัน date_default_timezone_set()
ฟังก์ชันนี้ใช้กำหนดเขตเวลาเริ่มต้นให้กับ PHP โดยการระบุชื่อของเขตเวลาที่ต้องการใช้งานในโปรแกรม นี่เป็นตัวอย่าง
<?php
date_default_timezone_set("Asia/Bangkok");
$date = new DateTime();
$timezone = $date->getTimezone();
echo $timezone->getName() . "\n";
echo $date->format(DateTime::RFC1123) . "\n";
echo "Default Time zone: " . date_default_timezone_get() . "\n";
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Asia/Bangkok
Sun, 25 Oct 2020 03:40:25 +0700
Default Time zone: Asia/Bangkok
ในตัวอย่างนี้ เรากำหนดเขตเวลาเริ่มต้นให้กับโปรแกรมเป็น Asia/Bangkok
นี่จะทำให้ออบเจ็คหรือฟังก์ชันของวันที่ทั้งหมดที่ถูกสร้างหลังจากนี้ใช้เขตเวลานี้ อย่างไรก็ตาม คุณยังคงสามารถใช้เมธอด setTimezone()
สำหรับกำหนดเขตเวลาที่เฉพาะให้กับออบเจ็คของวันที่ได้หากต้องการ
สำหรับตัวอย่างต่อไป มาทำความรู้จักกับออบเจ็คของเขตเวลาในภาษา PHP คุณได้เห็นเราใช้มันไปแล้วในตัวอย่างก่อนหน้า แต่สำหรับตัวอย่างนี้ มาสำรวจการทำงานของมันอย่างละเอียด นี่เป็นตัวอย่าง
<?php
$timezone = new DateTimeZone("Asia/Bangkok");
$bangkokTime = new DateTime("now", $timezone);
echo $bangkokTime->format(DateTime::RFC1123) . "\n";
echo $timezone->getOffset($bangkokTime) . "\n";
echo "\nTime zone name: " . $timezone->getName() . "\n";
echo "Time zone location\n";
foreach ($timezone->getLocation() as $k => $v) {
echo $k . ": " . $v . "\n";
}
นี่เป็นผลลัพธ์การทำงานของโปรแรกม
Sun, 25 Oct 2020 03:52:17 +0700
25200
Time zone name: Asia/Bangkok
Time zone location
country_code: TH
latitude: 13.75
longitude: 100.51666
comments:
ในตัวอย่างนี้ เป็นการแสดงการใช้งานออบเจ็คของเขตเวลาในภาษา PHP สำหรับสร้างเขตเวลาเพื่อนไปใช้งานในโปรแกรม
$timezone = new DateTimeZone("Asia/Bangkok");
เราสามารถสร้างออบเจ็คของเขตเวลาได้จากคลาส DateTimeZone
โดยการกำหนดชื่อเขตเวลาผ่านคอนสตรัคเตอร์ของคลาส จากนั้นนำมันไปใช้ในการกำหนดเขตเวลาให้กับออบเจ็คของวันที่ หรือเรียกดูข้อมูลเกี่ยวกับเขตเวลาดังกล่าวได้
$bangkokTime = new DateTime("now", $timezone);
echo $bangkokTime->format(DateTime::RFC1123) . "\n";
echo $timezone->getOffset($bangkokTime) . "\n";
นี่เป็นการใช้งานพื้นฐานของออบเจ็คเขตเวลา โดยทั่วไปแล้วเรามักใช้มันกำหนดเขตเวลาให้กับออบเจ็คของวันที่ เราสามารถรับค่าอ้างอิงของเขตเวลาด้วยเมธอด getOffset()
มันส่งค่าอ้างอิงจากเวลา UTC ที่มีหน่วยเป็นวินาที
echo "\nTime zone name: " . $timezone->getName() . "\n";
echo "Time zone location\n";
foreach ($timezone->getLocation() as $k => $v) {
echo $k . ": " . $v . "\n";
}
เราสามารถรับเอาชื่อของเขตเวลาได้โดยใช้เมธอด getName()
เมธอดนี้ส่งค่ากลับเป็นชื่อของเขตเวลาที่ถูกกำหนดในภาษา PHP นอกจากนี้ เราสามารถใช้เมธอด getLocation()
สำหรับรับเอาข้อมูลเกี่ยวกับที่ตั้งของเขตเวลาได้ด้วย เมธอดนี้ส่งค่ากลับเป็นข้อมูลที่ตั้งของเวลา เช่น รหัสประเทศ ละติจูด และลองจิจูด
สำหรับของเขตเวลาทั้งหมดที่สามารถใช้ได้ในภาษา PHP คุณสามารถอ่านเพิ่มเติมได้ที่ https://www.php.net/manual/en/timezones.php
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับวันที่และเวลาในภาษา PHP เราได้พูดถึงการทำงานกับวันที่และเวลา เช่น การแสดงเวลาปัจจุบัน การสร้างออบเจ็คของวันที่ การจัดรูปแบบการแสดงผลวันที่ และการใช้งานเขตเวลาในโปรแกรม