Xử lý ngày giờ (datetime)


tự học php nâng cao 22/07/2015 Cùng chuyên mục

Giới thiệu các định dạng ngày giờ - timezone và các hàm xử lý ngày giờ hay sử dụng(datetime) trong php

PHP có một số lượng lớn các hàm xử lý ngày giờ. Một số hàm làm việc với định dạng ngày giờ kiểu UNIX. Với định dạng này, sẽ bắt đầu từ ngày 01 tháng 01 năm 1970 lúc 00 giờ 00 phút 00 giây múi giờ GMT - trong hệ thống 32bit - giá trị lớn nhất là ngày 01 tháng 01 năm 2038.

LẤY THÔNG TIN NGÀY VÀ GIỜ

Sử dụng hàm time() là cách đơn giản nhất để lấy thông tin về ngày - giờ hiện tại. Nó không có tham số và trả ra timestamp. Timestamp là một số nguyên biểu thị cho số giây tính từ thởi điểm UNIX Epoch ( 0h0p0s 1-1-1970) cho đến thời điểm hiện tại.

<?php
	//kết quả trả ra có dạng như 1077913162
	echo time(),'<br>';	
	 //thời điểm hiện tại cộng thêm 300 giây
	$after_5min = time() + 5*60;	 
	$after_hour = time()+ 60*60;
	echo '5 phút nữa sẽ là: ',$after_5min,'<br>';
	echo '1 giờ sau sẽ là: ',$after_hour,'<br>';
	//tính khoảng thời gian giữa 2 thời điểm
	$dist = $after_hour-$after_5min;
	echo 'cách nhau: ',$dist,' giây - tương ứng: ',($dist/60),' phút';
?>

Để lấy timestamp với mi-li-giây sử dụng hàm microtime() - nó sẽ trả ra timestamp là một số thực. 
Ví dụ: so sánh thời gian chạy code xuất 1000 chuỗi 'hello world' giữa  hàm print()echo():

<?php
	//đặt thời điểm bắt đầu tính mốc thời gian
	$time_start = microtime();
	for($i = 0; $i < 1000; $i++)
	{
	 echo 'hello world';
	}
	//hiệu thời gian hiện tại và thời điểm tính mốc là khoảng thời gian chạy code
	echo '<br>thoi gian xuat cua echo: <b>',microtime()-$time_start,'</b><br>';
	$time_start = microtime();
	for($i = 0; $i < 1000; $i++)
	{
		print 'hello world';
	}
	echo '<br>thoi gian xuat cua ham print: <b>',microtime()-$time_start,'</b><br>';
?>

Để đo xem khoảng thời gian chạy code php ( tính toán hiệu suất) - các bạn có thể làm tương tự như ví dụ trên. 

Hàm date ( string $format [, int $timestamp = time() ] ) công dụng trả ra chuỗi theo định dạng, trong đó:
- format: là một chuỗi định dạng ngày giờ, ví dụ "Y/m/D"
- timestamp ( không bắt buộc) - mặc định hàm date() sẽ lấy thông tin từ hàm time(). Dưới đây là các ký tự được phép có trong chuỗi định dạng:

Ký tự Ý nghĩa Ví dụ
Y Năm với 4 chữ số 2015
y Năm với 2 chữ số 15
n Tháng với 1 hoặc 2 chữ số 7
m Tháng với 2 chữ số  07
F Tháng July
M Tháng với 3 chữ cái Jul
j Ngày trong tháng với 1 hoặc 2 chữ số 5
d Ngày trong tháng với 2 chữ số 05
l Ngày trong tuần Monday
D Ngày trong tuần với 3 chữ cái Mon
g Định dạng 12 giờ có 1 hoặc 2 chữ số 6
G Định dạng 24 giờ có 1 hoặc 2 chữ số 18
h Định dạng 12 giờ có 2 chữ số 06
H Định dạng 24 giờ có 2 chữ số 18
i Phút 21
a am hoặc pm am
A AM hoặc PM PM
s Giây 30

Ví dụ: lấy ra ngày - tháng - năm hiện tại:

<?php    
echo date("Y/m/d"),'<br>'; //kết quả trả ra có dạng như 2015/07/22
echo date("d/m/Y"),'<br>'; //kết quả trả ra có dạng như 22/07/2015
echo date("d/m/Y H:i:s"),'<br>'; //kết quả trả ra có dạng như 22/07/2015 08:30:30 
?>

Lưu ý: trong chuỗi định dạng bạn có thể sử dụng các ký tựnhư '-' '/' ':' ' ' để phân tách các thông tin.

<?php
 echo date("Y/m/d"),'<br>'; //kết quả: 2015/07/22
 echo date("Y:m:d"),'<br>'; //kết quả: 2015:07:22
 echo date("Y-m-d"),'<br>'; //kết quả: 2015-07-22
 echo date("Y m d h:i:s"),'<br>'; //kết quả 2015 07 22 08:30:30
?>

TIMEZONE (Múi giờ):

Việc tính toán thời gian dựa trên các múi giờ (timezone). PHP hỗ trợ các nhóm timezone sau:
- Africa
- America
- Antarctica
- Arctic
- Asia
- Atlantic
- Australia
- Europe
- Indian
- Pacific
- Others
Chúng ta ở Châu Á và ở Việt Nam, nên chọn timezoneHo_Chi_Minh trong nhóm Asia: Asia/Ho_Chi_Minh
Sử dụng hàm date_timezone_set($date, $timezone) - để đặt múi giờ.

<?php
date_timezone_set($date, timezone_open('America/New_York'));
echo "Mui gio America New York ".Padate_format($date, 'Y-m-d H:i:sP') . "<br>";
date_timezone_set($date, timezone_open('Asia/Ho_Chi_Minh'));
echo "Mui gio Asia Ho chi minh ".date_format($date, 'Y-m-d H:i:sP') . "<br>";
?>

TẠO TIMESTAMP:

Sử dụng hàm mktime() để tạo timestamp từ ngày giờ cụ thể. Cú pháp:

int mktime(string $hour, string $minute, string $second, string $month, string $day, string $year)

Ví dụ: Tạo một một timestamp tính từ: 8 giờ 30 phút, 00 giây - ngày 22, tháng 7, năm 2015

<?php
$time = mktime("8","30","00","07","22","2015");
//$time là timestamp, bạn có thể sử dụng nó trong hàm date()
echo date("Y-m-d H:i:s",$time),'<br>';
//sau 15 phút
$time += 900;
echo '15 phút sau: ',date("Y-m-d H:i:s",$time),'<br>';
//3 ngày sau
echo ' 3 ngày sau: ',date("Y-m-d H:i:s",($time+3*60*60*24));
?>

LẤY THÔNG TIN NGÀY GIỜ DẠNG MẢNG:

Sử dụng hàm getdate(), để trả ra thông tin ngày giờ dạng mảng

Khóa Gía trị Ví dụ
year Năm 2015
Mon Tháng 07
month Tên tháng July
mday Ngày trong tháng 22
weekday Ngày trong tuần Wednesday
hours Giờ 11
minutes Phút 30
seconds Giây 40
<?php
$time = getdate();
print_r($time);
echo "Ngày: ",$time["mday"]," tháng: ",$time["Mon"]," năm: ",$time["year"];
?>

TẠO TIMESTAMP từ chuỗi:

Trong một số trường hợp, chúng ta cần xử lý ngày giờ thông qua chuỗi như chuỗi định dạng datetime trong cơ sở dữ liệu mysql có định dạng: y-m-d, h:m:s như 2015-07-22 10:01:10. Sử dụng hàm strtotime() để tạo timestamp từ chuỗi này.

<?php
$time = strtotime("2015-07-22 10:01:10");
echo date("Y-m-d h:i:s",$time)."<br>";
echo "5 phút sau: ",date("Y-m-d h:i:s",$time+300);
?>

Tổng Kết

Trong bài này, chúng ta tìm hiểu các hàm xử lý ngày giờ cơ bản của PHP. Trong đó, các bạn
cần nắm vững các khái niệm:
- timestamp
- timezone
- date format 




Bình luận:


php