PHP ระดับสูง > วันที่และเวลา
วันที่และเวลาของ 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 บิต)
|