วันที่และเวลา ในภาษา PHP

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับวันที่และเวลาในภาษา PHP เราจะพูดถึงการแสดงวันที่และเวลาในโปรแกรม การจัดรูปแบบการแสดงผลของเวลา และการดำเนินการอื่นๆ ที่เกี่ยวข้องกับเวลา นี่เป็นเนื้อหาในบทนี้

  • การแสดงวันที่และเวลาปัจจุบัน
  • การสร้างวันที่และเวลาจากค่าที่กำหนด
  • การจัดรูปแบบการแสดงผลเวลา
  • Timestamp
  • Time zone

การแสดงวันที่และเวลาปัจจุบัน

การทำงานพื้นฐานที่พบบ่อยที่สุดในการเขียนโปรแกรมเมื่อต้องทำงานกับเวลาก็คือการแสดงวันที่และเวลาปัจจุบันออกทางหน้าจอ นี่เป็นตัวอย่างแรกของโปรแกรมสำหรับการแสดงวันที่และเวลาปัจจุบันออกทางหน้าจอในภาษา PHP

current_date.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

create_date.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 ได้ นี่เป็นตัวอย่าง

create_from_format.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

standard_date_format.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 โดยใช้ตัวกำหนดรูปแบบวันที่มาตฐานของภาษา

date_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 ที่มีหน่วยเป็นวินาทีที่เราสามารถนำไปใช้ได้ในโปรแกรม นี่เป็นตัวอย่าง

timestamp.php
<?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 ได้นี่เป็นตัวอย่าง

from_timestamp.php
<?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 นั้นเป็นตัวเลข ดังนั้นมันมีประโยชน์ในการนำมาบวกหรือลบเพื่อสร้างเวลาอ้างอิงจากเวลาที่เราต้องการ หรือนำมาใช้คำนวณสำหรับหาผลต่างของเวลา ในตัวอย่างนี้เราจะเขียนโปรแกรมเพื่อนับว่าเหลืออีกกี่วันก่อนที่จะถึงวันคริสมาสต์ในปีนี้

christmas_countdown.php
<?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 สำหรับเว็บเซิร์ฟเวอร์ หรือเขตเวลาจากระบบปฏิบัติการ ยกตัวอย่างเช่น

default_timezone.php
<?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 โดยการระบุชื่อของเขตเวลาที่ต้องการใช้งานในโปรแกรม นี่เป็นตัวอย่าง

set_default_timezone.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 คุณได้เห็นเราใช้มันไปแล้วในตัวอย่างก่อนหน้า แต่สำหรับตัวอย่างนี้ มาสำรวจการทำงานของมันอย่างละเอียด นี่เป็นตัวอย่าง

timezone_info.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 เราได้พูดถึงการทำงานกับวันที่และเวลา เช่น การแสดงเวลาปัจจุบัน การสร้างออบเจ็คของวันที่ การจัดรูปแบบการแสดงผลวันที่ และการใช้งานเขตเวลาในโปรแกรม