Gỡ rối khi dùng hàm date() trong PHP

Mình thấy các bạn thường copy hàm date() để dùng nhưng có thể là chưa hiểu rõ về hàm này. Do đó, dẫn đến việc cứ copy rồi thử nhiều đối số với hàm date() cho đến khi bạn được kết quả mong muốn.

Nhưng như thế thì mắc công quá. Sao chúng ta không cùng nhau hiểu rõ về hàm date() để sau này dùng một phát là chính xác luôn, không cần “mò mò thử thử” cho phí sức và tốn thời gian nữa. Let’s go!

1. Chức năng của hàm date()

Hàm date() trong PHP có chức năng trả về thời gian hiện tại dưới dạng chuỗi ký tự theo định dạng (format) thiết lập trước. Nếu bạn có một dấu thời gian (timestamp) và muốn định dạng nó theo một định dạng ngày giờ nào đó, hàm date() cũng sẽ thực hiện giúp bạn.

Lưu ý: Dấu thời gian (timestamp) là một cách biểu diễn thời gian. Nó thường là một số nguyên được mã hóa từ một thời gian nào đó. Ví dụ, ta có thời gian: 19-10-2021 05:30:59 có thể được mã hóa thành timestamp 1634614259.

Trong PHP, có thể dùng lớp DateTime để mã hóa thời gian thành timestamp như sau:

$date = new DateTime("19-10-2021 05:30:59");
echo $date->getTimestamp();//1634614259

2. Cú pháp của hàm date()

date(string $format, int $timestamp = null): string

Trong đó:

  • $format là chuỗi định dạng theo quy ước của lớp DateTimeInterface::format() trong PHP. Nếu sai định dạng có thể gây ra lỗi.
  • $timestamp là tham số tùy chọn, có thể có hoặc không. Nếu không có thì hàm date() sẽ trả về thời gian hiện tại theo $format. Nếu có timestamp thì hàm date() sẽ trả về thời gian được biểu diễn của timestamp theo $format.
  • Kiểu trả về là chuỗi ký tự (string) của thời gian theo định dạng thiết lập trước.

Lưu ý: Nếu $format không đúng định dạng theo quy định hoặc $timestamp không phải kiểu số nguyên thì sẽ gây ra lỗi.

3. Một số ví dụ sử dụng hàm date()

3.1. Các định dạng thời gian với hàm date()

Các định dạng trong hàm date() được quy ước sẵn theo format() của lớp DateTimeInterface::format(). Bên dưới là một số quy ước thường dùng:

Ký tự formatMô tảGiá trị trả về
Ngày (day)
dNgày của tháng, có 2 ký số (có thể bắt đầu với 0)01, 02 đến 09 đến 31
DCó 3 ký tự viết tắt đại diện cho thứ trong tuầnMon, Tue đến Sun
jNgày của tháng, không bắt đầu với 01, 2 đến 9 đến 31
lTên đầy đủ của thứ trong tuầnMonday, Tuesday đến Sunday
NLà số đại diện cho ngày trong tuần theo tiêu chuẩn ISO-86011 (thứ hai) đến 7 (chủ nhật)
SCó 2 ký tự thể hiện thứ tự của ngày trong thángst, nd, rd hoặc th. Thường dùng với ký tự format j, ví dụ 5th
WLà số đại diện cho ngày trong tuần0 (chủ nhật) đến 6 (thứ bảy)
zNgày trong năm, bắt đầu từ 00 đến 365
Tuần (week)
WSố tuần trong năm theo tiêu chuẩn ISO-8601Ví dụ: 42 (tuần thứ 42 trong năm)
Tháng (month)
FTên đầy đủ của thángJanuary đến December
mLà số đại diện cho tháng (có thể bắt đầu với 0)01 đến 12
M3 ký tự viết tắt đại điện cho thángJan, Feb đến Dec
nLà số đại diện cho tháng, không bắt đầu với 01 đến 12
tSố ngày tối đa có thể có trong một tháng28, 29, 30, 31
Năm (year)
LCho biết có phải là năm nhuận hay khôngTrả về 1 nếu năm nhuận, 0 nếu năm không nhuận
YCó 4 ký tự đại diện cho một nămVí dụ, 1999 hoặc 2003
yCó 2 ký tự đại diện cho một nămVí dụ, 99 hoặc 03
Giờ (time)
aViết thường giờ am hoặc pmam hoặc pm
AViết hoa giờ AM hoặc PMAM hoặc PM
gĐịnh dạng giờ 12 tiếng và không bắt đầu với 01, 2 đến 12
GĐịnh dạng giờ 24 tiếng và không bắt đầu với 00, 1, 2 đến 23
hĐịnh dạng giờ 12 tiếng và bắt đầu với 001, 02 đến 12
HĐịnh dạng giờ 24 tiếng và bắt đầu với 000, 01, 02 đến 23
iĐịnh dạng phút bắt đầu với 000, 01 đến 59
sĐịnh dạng giây bắt đầu với 000, 01 đến 59
uLà microseconds. Hàm date() sẽ luôn ra 000000 vì không hỗ trợ microseconds. Lớp Datetime thì hỗ trợ microseconds.Ví dụ: 654321
vLà milliseconds. Tương tự như u với date() và DatetimeVí dụ: 654
Timezone
eThể hiện múi giờ (timezone)Ví dụ: UTC, GMT, Atlantic/Azores
OChênh lệch múi giờ với giờ GMT (+0) (không có : ở giữa giờ và phút)Ví dụ: +0200
PChênh lệch múi giờ với giờ GMT (+0) (có : ở giữa giờ và phút)Ví dụ: +02:00
TViết tắt múi giờ (nếu biết). Còn không thì lấy chênh lệch với giờ GMT (+0)Ví dụ: EST, MDT hoặc +05
Full date/time
cĐịnh dạng thời gian theo tiêu chuẩn ISO 8601Ví dụ: 2004-02-12T15:19:21+00:00
rĐịnh dạng thời gian theo tiêu chuẩn RFC 2822Ví dụ: Thu, 21 Dec 2000 16:01:07 +0200

3.2. Một số ví dụ về định dạng với hàm date()

$today1 = date("F j, Y, g:i a");//October 5, 2021, 6:29 am
$today2 = date("m.d.y");//10.05.21
$today3 = date("j, n, Y");//5, 10, 2021
$today4 = date("Ymd");//20211005
$today5 = date('h-i-s, j-m-y, it is w Day');//06-29-51, 5-10-21, 2931 2951 2 Tueam21
$today6 = date('\i\t \i\s \t\h\e jS \d\a\y.');//it is the 5th day.
$today7 = date("D M j G:i:s T Y");//Tue Oct 5 6:29:51 CEST 2021
$today8 = date('H:m:s \m \i\s\ \m\o\n\t\h');//06:10:51 m is month
$today9 = date("H:i:s");//06:29:51
$today10 = date("Y-m-d H:i:s");//2021-10-05 06:29:51
//date() có timestamp
$datetime = date('d-m-Y H:i:s', 1634614259);//19-10-2021 05:30:59

3.3. Hàm date() với default timezone

$datetime = date('d-m-Y H:i:s');//05-10-2021 06:37:16
//hoặc
date_default_timezone_set('Asia/Ho_Chi_Minh');
$datetime = date('d-m-Y H:i:s');//05-10-2021 11:37:16

Kết quả của hàm date() khi không thiết lặp timezone và khi thiết lặp timezone là khác nhau về giờ. Khi không thiết lặp timezone thì PHP sẽ lấy thời gian theo timezone mặc định được cấu hình trong file php.ini.

3.4. Thay đổi default timezone trong PHP

Nếu sử dụng XAMPP thì vào Config của Apache để cấu hình lại file php.ini.

Cấu hình file php.ini
Cấu hình file php.ini

Tìm date.timezone và thay đổi timezone theo những timezone được hỗ trợ List of Supported Timezones mà bạn muốn.

Đổi timezone trong file php.ini
Đổi timezone trong file php.ini

Qua bài này, hy vọng các bạn sẽ hiểu rõ về date() trong PHP và tránh những bối rối khi sử dụng hàm này.

5/5 - (1 bình chọn)
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.