ยินดีต้อนรับ กรุณา สมัครสมาชิก หรือเข้าสู่ระบบ

Home » webboard » PHP
เข้าชม : 1782

ฟังก์ชั่นเกี่ยวกับเวลา

โพสต์เมื่อ: วันพฤหัสบดี 15 มีนาคม 2555  21:17 น.

วันที่และเวลาของ 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
ฟังก์ชั่นเกี่ยวกับเวลา


คุณต้องสมัครสมาชิก ถึงจะโพสกระทู้ได้

ปิดรับสมัครสมาชิกแล้ว


คำยอดฮิต :- 0