PHP

Home

PHP Tutorial
Knowledge Developer Database Internet Resource
วันที่และเวลา
1. แหล่งของวันที่และเวลา
2. วันที่และเวลาของ PHP
3. วันที่และเวลาใน แม่ข่ายฐานข้อมูล
4. การแปลงรูปแบบวันที่ ระหว่าง PHP กับ MySQL
 
PHP ระดับสูง
1. การอัพโหลด
2. ฟังก์ชันเมล์และเครือข่าย
3. วันที่และเวลา
4. กราฟฟิกและภาพ
 
PHP
PHP เบื้องต้น
การสร้างโปรแกรมประยุกต์เว็บ
PHP ระดับสูง
 
Internet
PHP
SSI
HTML
AJAX
 
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 บิต)

 


  

สงวนลิขสิทธิ์ (C) widebase / Julaphak