วันที่และเวลาของ PHP
ฟังก์ชันของ PHP ที่ทำงานกับวันที่และเวลา
เวลาประทับใน PHP
ฟังก์ชัน time() ใน PHP และฟังก์ชันสารสนเทศไฟล์ เช่น filemtime ส่งออกค่าเวลาประทับ (timestamp) เป็นจำนวนเต็ม 32 บิต ค่านี้นำเสนอจำนวนวินาทีตั้งแต่เที่ยงคืนวันที่ 1 มกราคม 2513 (1970) บางครั้งเรียกว่า Epoch ค่าเริ่มต้นจาก 0 ค่ามากที่สุด 2147483647 ที่นำเสนอเป็นคือ วันที่ 18 มกราคม 2581 (2038)
ผลลัพธ์ตามตัวอย่างข้างบน
PHP ฟังก์ชัน time - 1157251443
การดึงวันที่และเวลา
PHP มีหลายฟังก์ชันที่ทำงานกับเวลาประทับ
ฟังก์ชัน time()
ฟังก์ชัน time ใช้แสดงวันที่และเวลาประทับปัจจุบัน ตามปกติส่งออกค่าจำนวนเต็ม 32 บิต
ฟังก์ชัน Mktime() และ Gmmktime()
ฟังก์ชัน mktime() และ gmmktime() สามารถสร้างเวลาประทับและส่งออกค่าเทียบเท่าเวลาประทับ
ฟังก์ชัน mktime() รับพารามิเตอร์ ชั่วโมง นาที วินาที เดือน วัน และปี ค.ศ.
int mktime (int hour, int minute, int second, int month, int day, int year [,int is_dst])
is_dst ซึ่งแสดงวันที่อยู่ใน daylight saving time หรือไม่ ค่านี้ ถ้าใช่ เป็น 1 ถ้าไม่ใช่ 0 หรือ -1 (ค่าเริ่มต้น) ถ้าไม่ทราบ นี่เป็นตัวเลือกนี้ใช้น้อยมาก
ถ้าปล่อยให้พารามิเตอร์ว่าง จะเป็นการตั้งค่าปัจจุบัน
$timestamp = mktime ( );
ฟังก์ชัน gmmktime() รับพารามิเตอร์เดียวกันแต่ใช้เวลา GMT โดย PHP ใช้ฟังก์ชันนี้หาเวลาปัจจุบันตามtime zone จากระบบปฏิบัติการ
ฟังก์ชัน microtime()
ฟังก์ชัน microtime() ส่งออกค่าเป็นไมโครวินาที ด้วยข้อความ 2 ค่า
"microsecond second"
ค่า second เป็นวินาทีจากวันที่ 1 มกราคม 2513 (1 มกราคม 1970) ตัวอย่างต่อไป แสดงค่า microtime() และการแปลงค่าไมโครวินาที
<?php
$msec = microtime();
echo "microtime $msec<br/>";
$val = explode(' ',$msec);
$newval= (int)((float)$val[0]*1000000);
echo "microtime $newval<br/>";
?>
ผลลัพธ์
microtime 0.42187700 1157266409
microtime 421877
ฟังก์ชัน microtime() ส่งออกค่าเป็นจำนวนทศนิยม ด้วยตั้งค่าพารามิเตอร์ตัวเลือก เป็น TRUE ค่าส่งออกนี้สามารถนำไปใช้วัดเวลาการประมวลผล
ฟังก์ชัน strtotime()
ฟังก์ชัน strtotime() ใช้แปลงค่ารูปแบบวันที่จากข้อความเป็นเวลา
<?
// yyyy-mm-dd
$time = strtotime("2006-08-05");
// mm-dd-yyyy
$time = strtotime("08-05-2006");
// RFC 2822
$time = strtotime("Sun, 5 Aug 2006 14:30:25 EST");
// ISO 8601
$time = strtotime("2006-08-05T13:28:45-09:00");
// รวมถึงภาษาอังกฤษ
$time = strtotime("yesterday");
?>
ฟังก์ชัน getdate ()
ฟังก์ชัน getdate() ส่งออกวันที่และเวลาปัจจุบันเป็น array มีไวยากรณ์ดังนี้
array getdate ( int timestamp)
ฟังก์ชันนี้ใช้เวลาประทับเป็นพารามิเตอร์และส่งออก array เชื่อมโยงแสดงส่วนของวันที่และเวลาตามการแสดงในตาราง 20.1
ตาราง 3.3.1 คู่ ค่าคีย์ของ array เชื่อมโยงจากฟังก์ชัน getdate ( )
| คีย์ |
ค่า |
|
seconds
|
วินาทีเป็นตัวเลข
|
|
minutes
|
นาทีเป็นตัวเลข
|
|
hours
|
ชั่วโมงเป็นตัวเลข
|
|
mday
|
วันของเดือนเป็นตัวเลข
|
|
wday
|
วันของสัปดาห์เป็นตัวเลข
|
|
mon
|
เดือนเป็นตัวเลข
|
|
year
|
ปีเป็นตัวเลข
|
|
yday
|
วันของปีเป็นตัวเลข
|
|
weekday
|
วันของเป็นรูปแบบข้อความเต็ม
|
|
month
|
เดือนเป็นรูปแบบข้อความเต็ม
|
ตัวอย่างคำสั่งแสดง array ของฟังก์ชัน getdate()
<?php
$time = strtotime("08-05-2006 17:25:35");
$adate = getdate($time);
var_dump($adate);
?>
ผลลัพธ์
array(11) {
["seconds"]=> int(35)
["minutes"]=> int(25)
["hours"]=> int(17)
["mday"]=> int(8)
["wday"]=> int(1)
["mon"]=> int(5)
["year"]=> int(2006)
["yday"]=> int(127)
["weekday"]=> string(6) "Monday"
["month"]=> string(3) "May"
[0]=> int(1147080335) // timestamp
}
การตรวจสอบวันที่
ฟังก์ชัน checkdate ( ) สามารถใช้ตรวจสอบความถูกต้องของวันที่ โดยเฉพาะการตรวจสอบวันที่นำเข้าจากผู้ใช้ ฟังก์ชัน checkdate ( ) มีไวยากรณ์ดังนี้
int checkdate (int month, int day, int year)
year เป็นจำนวนเต็มระหว่าง 0 ถึง 32767 month เป็นจำนวนเต็มระหว่าง 1 ถึง 12 และ day เป็นจริงตามเดือน ฟังก์ชันนี้พิจารณาปีอธิกสุรทิน
ตัวอย่าง เช่น
checkdate (9, 18, 1972); // ส่งออก True
checkdate (9, 31,2000); // ส่งออกค่า False
การจัดรูปแบบวันที่และเวลา
การแสดงวันที่และเวลาของ PHP ส่วนใหญ่ใช้ฟังก์ชัน date()
ฟังก์ชัน date() และ gmdate()
ฟังก์ชัน date( ) ใช้พารามิเตอร์ 2 ตัว พารามิเตอร์แรกเป็นการจัดรูปแบบ พารามิเตอร์ตัวเลือกที่ 2 เป็นเวลาประทับ Unix ถ้าไม่ระบุการปรับเวลา date ( ) ฟังก์ชันนี้ส่งออกค่าวันที่และเวลาปัจจุบัน
ฟังก์ชัน gmdate() แสดงรูปแบบวันที่เหมือน date() ยกเว้นการแสดงค่าเป็นเวลา GMT
ตัวอย่างการเรียกฟังก์ชัน date ( )
echo date ("js F Y");
ผลลัพธ์อยู่ในรูปแบบ "27 th Auguet 2000"
ตัวอย่างการแสดงรูปแบบวันที่ของฟังก์ชัน date()
<?php
$get_time = strtotime("2005-06-24 10:25:32");
echo "\$get_time: 2006-06-24 10:25:32<br/>";
echo date('Y-m-d H:I:s', $get_time);
echo "<br/>";
echo date('l, F jS, Y', $get_time);
echo "<br/>";
echo date('c', $get_time);
echo "<br/>";
echo date('r', $get_time);
echo "<br/>";
?>
รหัสรูปแบบวันที่แสดงในตาราง 3.3.2
ตาราง 3.3.2 รหัสรูปแบบสำหรับฟังก์ชัน date ( ) ของ PHP
| รหัส |
คำอธิบาย |
|
a
|
เช้าหรือบ่าย แสดงด้วยอักษรตัวพิมพ์เล็ก 2 ตัว "am" หรือ "pm"
|
|
A
|
เช้าหรือบ่าย แสดงด้วยอักษรตัวพิมพ์ใหญ่ 2 ตัว "AM" หรือ "PM"
|
|
B
|
เวลาสากล Swatch Internet รายละเอียดดูที่ http://swatch.com/internettime/ internettime.php3
|
|
d
|
วัน ของ เดือน เป็นตัวเลข 2 ตำแหน่งนำหน้าด้วยศูนย์ ช่วงจาก "01" ถึง "31"
|
|
D
|
วัน ของ สัปดาห์ ในรูปแบบย่อ3 ตัวอักษร ช่วงจาก "Mon" ถึง "Sun"
|
|
F
|
เดือน ของ ปีในรูปแบบเต็ม ช่วงจาก "January" ถึง "December"
|
|
g
|
ชั่วโมงของวันในรูปแบบ 12 ชั่วโมงปราศจากการนำหน้าด้วยศูนย์ ช่วงจาก "1" ถึง "12"
|
|
G
|
ชั่วโมงของวันในรูปแบบ 24 ชั่วโมงปราศจากการนำหน้าด้วยศูนย์ ช่วงจาก "0" ถึง "23"
|
|
h
|
ชั่วโมงของวันในรูปแบบ 12 ชั่วโมง นำหน้าด้วยศูนย์ ช่วงจาก "01" ถึง "12"
|
|
H
|
ชั่วโมงของวันในรูปแบบ 24 ชั่วโมง นำหน้าด้วยศูนย์ ช่วงจาก "00" ถึง "23"
|
|
i
|
นาที นำด้วยศูนย์ ช่วงจาก "00" ถึง "59"
|
|
I
|
Daylight saving time แสดงเป็นค่า boolean ค่านี้ส่งออก "1" ถ้าวันที่อยู่ใน daylight saving time และ "0" ถ้าไม่ใช่
|
|
j
|
วันของเดือนเป็นตัวเลยปราศจากการนำหน้าด้วยศูนย์ ช่วงจาก "1" ถึง "31"
|
|
l
|
วันของสัปดาห์ในรูปแบบเต็ม ช่วงจาก "Monday"ถึง "Sunday"
|
|
L
|
มีอธิกสุงทิน แสดงเป็นค่า boolean ค่านี้ส่งออก "1" ถ้าวันที่อยู่ในปีอธิกสุงทิน และ "0" ถ้าไม่ใช่
|
|
m
|
เดือนของปีเป็นตัวเลข 2 ตำแหน่งนำหน้าด้วยศูนย์ ช่วงจาก "01" ถึง "12"
|
|
M
|
เดือนของปีในรูปแบบย่อ 3 ตัวอักษร ช่วงจาก "Jan" ถึง "Dec"
|
|
n
|
เดือนของปีเป็นตัวเลขปราศจากการนำหน้าด้วยศูนย์ ช่วงจาก "1" ถึง "12"
|
|
s
|
วินาทีนำหน้าด้วยศูนย์ ช่วงจาก "00" ถึง "59"
|
|
S
|
อักษรต่อท้ายแสดงลำดับในรูปแบบ 2 ตัวอักษร ได้แก่ "st" , "nd" , "rd" หรือ "th"
|
|
t
|
จำนวนทั้งหมดในเดือน ช่วงจาก "28" ถึง "31"
|
|
T
|
การตั้งค่าเขตเวลาของแม่ข่ายในรูปแบบ 3 ตัวอักษร เช่น "EST"
|
|
U
|
จำนวนวินาทีทั้งหมดจาก 1 มกราคม 1970 ถึงเวลาปัจจุบัน การประทับเวลา Unix สำหรับวินาที
|
|
W
|
วันของสัปดาห์เป็นตัวเลข 1 ตำแหน่ง ช่วงจาก "0" (วันอาทิตย์) ถึง "6" (วันเสาร์)
|
|
y
|
ปีในรูปแบบ 2 ตำแหน่ง ตัวอย่างเช่น "00"
|
|
Y
|
ปีในรูปแบบ 4 ตำแหน่ง ตัวอย่างเช่น "2000"
|
|
z
|
วันของปีเป็นตัวเลข ช่วงจาก "0" ถึง "365"
|
|
Z
|
ค่าสำหรับเขตเวลาปัจจุบันในวินาที ช่วงจาก "-43200" ถึง "43200"
|
การติดต่อกับเวลาประทับ Unix
พารามิเตอร์ที่ 2 ของฟังก์ชัน date ( ) คือ การประทับเวลา Unix
ในระบบ Unix ส่วนมากเก็บเวลาและวันปัจจุบันเป็นจำนวนเต็ม 32 มิต เก็บวินาทีตั้งแต่เที่ยง 1 มกราคม 1970 GMT โดยรู้จักในชื่อ Unix Epoch ถึงแม้ว่ากำลังเรียกใช้ PHP บนแม่ข่าย Windows แต่ยังคงรูปแบบนี้จากการเรียกฟังก์ชัน date() และฟังก์ชันอื่นใน PHP
คำสั่งนี้ส่งออกเวลาประทับ Unix สำหรับวันที่และเวลาปัจจุบัน รวมถึงรับค่านี้
$timestamp = date ("U");
ฟังก์ชัน strftime ()
ฟังก์ชัน strftime() ทำงานคล้ายกับฟังก์ชัน date() ยกเว้นการประยุกต์ต่างกันเล็กน้อยใน PHP และขึ้นกับการตั้งค่า locale รวมถึงการตั้งค่าเป็นภาษาไทย รหัสการแสดงผลอยู่ในตาราง 3.3.3
ตาราง 3.3.3 รหัสรูปแบบสำหรับฟังก์ชัน strftime( ) ของ PHP
| รหัส |
คำอธิบาย |
|
%a
|
ตัวย่อชื่อวันในสัปดาห์ ตามการตั้งค่า locale
|
|
%A
|
ชื่อเต็มของวันในสัปดาห์ ตามการตั้งค่า locale
|
|
%b
|
ชื่อย่อของเดือน ตามการตั้งค่า locale
|
|
%B
|
ชื่อเต็มของเดือน ตามการตั้งค่า locale
|
|
%c
|
การนำเสนอวันที่และวันที่ ตามการตั้งค่า locale
|
|
%C
|
ตัวเลขศตวรรษ
|
|
%d
|
วันของเดือนเป็นตัวเลข ที่นำด้วยศูนย์
|
|
%D
|
สร้างผลลัพธ์เหมือนกับ %m/%d/%y
|
|
%e
|
วันของเดือนเป็นตัวเลข ที่ไม่มีศูนย์นำ
|
|
%H
|
ชั่วโมง เป็นตัวเลขในระบบ 24 ชั่วโมงที่นำด้วยศูนย์
|
|
%I
|
ชั่วโมง เป็นตัวเลขในระบบ 12 ชั่วโมงที่นำด้วยศูนย์
|
|
%j
|
วันของปีเป็นตัวเลข ที่นำหน้าด้วยศูนย์
|
|
%m
|
เดือนเป็นตัวเลข ที่นำหน้าด้วยศูนย์
|
|
%M
|
นาทีเป็นตัวเลขที่นำหน้าด้วยศูนย์
|
|
%p
|
am หรือ pm ขึ้นกับเวลา หรือค่าถูกต้องตาม locale
|
|
%r
|
เวลาเต็มแบบ AM หรือ PM
|
|
%R
|
เวลาเต็มแบบ 24 ชั่วโมง
|
|
%S
|
วินาทีเป็นตัวเลขที่นำหน้าด้วยศูนย์
|
|
%T
|
ผลลัพธ์เวลาเหมือนกับ %H:%M:%S
|
|
%u
|
วันในสัปดาห์เป็นตัวเลข โดย 1 คือวันจันทร์
|
|
%x
|
การนำเสนอวันที่ โดยไม่มีเวลา ตามการตั้งค่า locale
|
|
%X
|
การนำเสนอเวลา โดยไม่มีวันที่ ตามการตั้งค่า locale
|
|
%y
|
ปีระบุเป็น 2 ตำแหน่งที่ไม่มีศตวรรษ (00-99)
|
|
%Y
|
ปีระบุเป็น 4 ตำแหน่งกับศตวรรษ
|
|
%z
|
โซนเวลา
|
|
%%
|
แสดงตังอักษร ‘%’ ในข้อความผลลัพธ์
|
ฟังก์ชัน strftime() การแสดงผลตามการตั้งค่า locale
<?php
// strftime function
echo strftime('%c', $get_time);
echo "<br/>";
echo strftime('%d %B, %Y (%A)', $get_time);
echo "<br/>";
echo "ตั้งค่า locale เป็นไทย<br/>";
setlocale(LC_ALL, 'thai'); // ตั้งค่า locale เป็นไทย
echo strftime('%c', $get_time);
echo "<br/>";
echo strftime('%d %B, %Y (%A)', $get_time);
echo "<br/>";
echo strftime('%x', $get_time);
echo "<br/>";
?>
การคำนวณวันที่
วิธีง่ายที่สุดในการหาความยาวของเวลาระหว่าง 2 วันใน PHP เป็นการใช้ความแตกต่างระหว่าง เวลาประทับ Unix
<?php
$day = 18;
$month = 9;
$year = 1972;
// หาวันเกิดในรูปแบบ unix
$bdayunix = mktime(0, 0, 0, $month, $day, $year);
// หาเวลาประทับ unix ปัจจุบัน
$nowunix = mktime();
// หาความแตกต่าง
$ageunix = $nowunix - $bdayunix;
//แปลงจากวินาทีเป็นปี
$age = ($ageunix / (365 * 24 * 60 * 60));
echo "อายุ $age ปี";
?>
ในสคริปต์นี้ตั้งค่าวันที่สำหรับการคำนวณอายุ ในโปรแกรมประยุกต์ค่านี้อาจจะมาจากฟอร์ม HTML
เริ่มต้นโดยการเรียก mktime ( ) เพื่อหาเวลาประทับสำหรับวันเกิด และ เวลาปัจจุบัน
$bdayunix = mktime(0, 0, 0, $month, $day, $year);
$nowunix = mktime();
หมายเหตุ วิธีนี้อาจเกิดความผิดพลาดจากความจำกัดของช่วงเวลาประทับ Unix (โดยทั่วไปเป็นจำนวนเต็ม 32 บิต)
ที่มา :
http://www.widebase.net/internet/php/phpadv/phpadv0302.shtml