跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

ทำงานกับ Date และ Time ใน PHP

บทความนี้กล่าวถึงการจัดการวันที่และเวลาใน PHP โดยเน้นที่การใช้ `DateTime` class ซึ่งเป็นเครื่องมือหลักในการสร้าง, แก้ไข, และจัดรูปแบบวันที่และเวลา รวมถึงการจัดก...

ทำงานกับ Date และ Time ใน PHP

ในโลกของการพัฒนาเว็บ การจัดการวันที่และเวลาเป็นสิ่งที่หลีกเลี่ยงไม่ได้ ไม่ว่าจะเป็นการบันทึกเวลาที่ผู้ใช้สร้างบัญชี, การแสดงวันที่ของบทความ, หรือการคำนวณระยะเวลาระหว่างสองเหตุการณ์ PHP มีเครื่องมือที่ทรงพลังในการจัดการเรื่องเหล่านี้ โดยเฉพาะอย่างยิ่ง DateTime class ซึ่งเป็นหัวใจหลักในการทำงานกับวันที่และเวลาใน PHP ยุคใหม่

DateTime Class: หัวใจของการจัดการวันที่และเวลา

DateTime class เป็น class ที่ใช้แทนวันที่และเวลา และมี method มากมายที่ช่วยให้เราสามารถจัดการกับวันที่และเวลาได้อย่างง่ายดาย มาดูตัวอย่างการสร้าง DateTime object กันก่อน:

<?php

// สร้าง DateTime object โดยใช้เวลาปัจจุบัน
$date = new DateTime();

// แสดงผลวันที่และเวลาปัจจุบัน
echo $date->format('Y-m-d H:i:s'); // ตัวอย่าง: 2023-10-27 10:30:00

?>

ในตัวอย่างข้างต้น เราสร้าง DateTime object โดยไม่มี parameter ซึ่งหมายถึงการใช้เวลาปัจจุบัน จากนั้นเราใช้ method format() เพื่อแสดงผลวันที่และเวลาในรูปแบบที่เราต้องการ (Y-m-d H:i:s คือรูปแบบปี-เดือน-วัน ชั่วโมง:นาที:วินาที)

การสร้าง DateTime object จาก String

บ่อยครั้งที่เราต้องสร้าง DateTime object จาก string ที่อยู่ในรูปแบบต่างๆ เช่น จากฐานข้อมูล หรือจาก API เราสามารถทำได้โดยการส่ง string เข้าไปใน constructor:

<?php

$dateString = '2023-12-25'; // วันคริสต์มาส

// สร้าง DateTime object จาก string
$date = new DateTime($dateString);

// แสดงผลวันที่ในรูปแบบต่างๆ
echo $date->format('d/m/Y'); // ตัวอย่าง: 25/12/2023
echo "<br>";
echo $date->format('l, F j, Y'); // ตัวอย่าง: Monday, December 25, 2023

?>

PHP จะพยายาม parse string ที่เราส่งเข้าไป ถ้า string นั้นอยู่ในรูปแบบที่ PHP รู้จัก ก็จะสามารถสร้าง DateTime object ได้สำเร็จ แต่ถ้า string นั้นอยู่ในรูปแบบที่ไม่รู้จัก PHP จะ throw exception ดังนั้นเราควรระมัดระวังและตรวจสอบรูปแบบของ string ก่อนเสมอ

ข้อผิดพลาดที่พบบ่อย: การส่ง string ที่ไม่ได้อยู่ในรูปแบบที่ถูกต้องให้กับ constructor ของ DateTime class จะทำให้เกิด Exception ดังนั้นควรตรวจสอบ format ของวันที่ก่อนเสมอ

การแก้ไขวันที่และเวลา

DateTime class มี method ที่ช่วยให้เราสามารถแก้ไขวันที่และเวลาได้อย่างง่ายดาย เช่น การเพิ่มหรือลดวัน, เดือน, ปี, ชั่วโมง, นาที, หรือวินาที เราสามารถใช้ method add() และ sub() ร่วมกับ DateInterval object เพื่อทำการแก้ไข:

<?php

$date = new DateTime(); // เวลาปัจจุบัน

// เพิ่ม 1 สัปดาห์
$date->add(new DateInterval('P1W')); // P1W หมายถึง Period of 1 Week

echo "อีก 1 สัปดาห์ข้างหน้า: " . $date->format('Y-m-d H:i:s') . "<br>";

// ลด 3 วัน
$date->sub(new DateInterval('P3D')); // P3D หมายถึง Period of 3 Days

echo "ย้อนหลังไป 3 วัน: " . $date->format('Y-m-d H:i:s') . "<br>";

// เพิ่ม 2 เดือน และ 5 ชั่วโมง
$date->add(new DateInterval('P2M T5H')); // P2M หมายถึง Period of 2 Months, T5H หมายถึง Time of 5 Hours

echo "เพิ่ม 2 เดือน และ 5 ชั่วโมง: " . $date->format('Y-m-d H:i:s');

?>

DateInterval object จะกำหนดช่วงเวลาที่เราต้องการเพิ่มหรือลด โดยใช้รูปแบบ ISO 8601 duration format (เช่น P1W สำหรับ 1 สัปดาห์, P3D สำหรับ 3 วัน, P2M สำหรับ 2 เดือน, T5H สำหรับ 5 ชั่วโมง)

Timezones: การจัดการเวลาที่แตกต่างกัน

การจัดการ Timezone เป็นสิ่งสำคัญเมื่อเราต้องทำงานกับผู้ใช้ที่อยู่ใน Timezone ที่แตกต่างกัน PHP มี DateTimeZone class ที่ช่วยให้เราสามารถจัดการ Timezone ได้อย่างง่ายดาย

การสร้าง DateTime object ด้วย Timezone

<?php

// สร้าง Timezone object สำหรับ Asia/Bangkok
$timezone = new DateTimeZone('Asia/Bangkok');

// สร้าง DateTime object โดยระบุ Timezone
$date = new DateTime('now', $timezone);

// แสดงผลวันที่และเวลาใน Timezone ที่ระบุ
echo "เวลาปัจจุบันในกรุงเทพฯ: " . $date->format('Y-m-d H:i:s') . "<br>";

// สร้าง Timezone object สำหรับ America/New_York
$newYorkTimezone = new DateTimeZone('America/New_York');

// สร้าง DateTime object โดยระบุ Timezone
$newYorkDate = new DateTime('now', $newYorkTimezone);

// แสดงผลวันที่และเวลาใน Timezone ที่ระบุ
echo "เวลาปัจจุบันในนิวยอร์ก: " . $newYorkDate->format('Y-m-d H:i:s');

?>

ในตัวอย่างข้างต้น เราสร้าง DateTimeZone object โดยระบุ Timezone ที่เราต้องการ (เช่น Asia/Bangkok หรือ America/New_York) จากนั้นเราสร้าง DateTime object โดยส่ง DateTimeZone object เข้าไปใน constructor

การแปลง Timezone

เราสามารถแปลง Timezone ของ DateTime object ได้โดยใช้ method setTimezone():

<?php

$date = new DateTime('2023-12-25 10:00:00', new DateTimeZone('America/New_York'));

echo "เวลาเดิมในนิวยอร์ก: " . $date->format('Y-m-d H:i:s') . "<br>";

// แปลง Timezone เป็น Asia/Bangkok
$date->setTimezone(new DateTimeZone('Asia/Bangkok'));

echo "แปลงเป็นเวลาในกรุงเทพฯ: " . $date->format('Y-m-d H:i:s');

?>

ข้อผิดพลาดที่พบบ่อย: การไม่ระบุ Timezone เมื่อสร้าง DateTime object อาจทำให้เกิดปัญหาเมื่อทำงานกับผู้ใช้ที่อยู่ใน Timezone ที่แตกต่างกัน ดังนั้นควรระบุ Timezone เสมอเมื่อสร้าง DateTime object

Formatting Dates: การแสดงผลวันที่และเวลาในรูปแบบต่างๆ

DateTime class มี method format() ที่ช่วยให้เราสามารถแสดงผลวันที่และเวลาในรูปแบบต่างๆ ได้อย่างง่ายดาย รูปแบบที่เราใช้ใน format() method จะเป็น string ที่ประกอบด้วย character ที่มีความหมายเฉพาะ (เช่น Y สำหรับปี, m สำหรับเดือน, d สำหรับวัน, H สำหรับชั่วโมง, i สำหรับนาที, s สำหรับวินาที)

ตารางต่อไปนี้แสดง character ที่พบบ่อยและมีความหมาย:

  • Y: ปี (4 หลัก) เช่น 2023
  • y: ปี (2 หลัก) เช่น 23
  • m: เดือน (ตัวเลข 2 หลัก) เช่น 01, 02, ..., 12
  • n: เดือน (ตัวเลข ไม่เติม 0) เช่น 1, 2, ..., 12
  • M: เดือน (ตัวย่อ 3 ตัวอักษร) เช่น Jan, Feb, ..., Dec
  • F: เดือน (ชื่อเต็ม) เช่น January, February, ..., December
  • d: วัน (ตัวเลข 2 หลัก) เช่น 01, 02, ..., 31
  • j: วัน (ตัวเลข ไม่เติม 0) เช่น 1, 2, ..., 31
  • D: วัน (ตัวย่อ 3 ตัวอักษร) เช่น Mon, Tue, ..., Sun
  • l: วัน (ชื่อเต็ม) เช่น Monday, Tuesday, ..., Sunday
  • H: ชั่วโมง (24 ชั่วโมง) เช่น 00, 01, ..., 23
  • h: ชั่วโมง (12 ชั่วโมง) เช่น 01, 02, ..., 12
  • i: นาที เช่น 00, 01, ..., 59
  • s: วินาที เช่น 00, 01, ..., 59
  • a: am หรือ pm (ตัวพิมพ์เล็ก)
  • A: AM หรือ PM (ตัวพิมพ์ใหญ่)
  • T: Timezone abbreviation เช่น EST, MDT
  • P: Timezone offset จาก UTC เช่น +00:00, -05:00

ตัวอย่างการใช้งาน format() method:

<?php

$date = new DateTime();

echo "วันนี้: " . $date->format('l, F j, Y') . "<br>";
echo "เวลา: " . $date->format('h:i:s A') . "<br>";
echo "ปี/เดือน/วัน: " . $date->format('Y/m/d') . "<br>";
echo "Timezone: " . $date->format('T P');

?>

เราสามารถใช้ character เหล่านี้ผสมกันเพื่อสร้างรูปแบบที่เราต้องการได้อย่างอิสระ

กรณีใช้งานจริง: การบันทึกเวลาที่ผู้ใช้สร้างบัญชีในรูปแบบ Y-m-d H:i:s เพื่อให้ง่ายต่อการ query ในฐานข้อมูล

ข้อผิดพลาดที่พบบ่อย: การใช้ character ที่ไม่ถูกต้องใน format() method จะทำให้ได้ผลลัพธ์ที่ไม่ถูกต้อง ดังนั้นควรตรวจสอบ character ที่ใช้ให้ถูกต้องเสมอ

สรุป

การจัดการวันที่และเวลาใน PHP เป็นเรื่องที่ง่ายขึ้นมากด้วย DateTime class และ DateTimeZone class เราสามารถสร้าง, แก้ไข, แปลง Timezone, และ format วันที่และเวลาได้อย่างง่ายดาย อย่างไรก็ตาม เราควรระมัดระวังข้อผิดพลาดที่พบบ่อย เช่น การไม่ระบุ Timezone หรือการใช้ character ที่ไม่ถูกต้องใน format() method ในบทถัดไป เราจะเรียนรู้เกี่ยวกับการทำงานกับ JSON ใน PHP

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务