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 là 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ự format Mô tả Giá trị trả về Ngày (day)
d Ngày của tháng, có 2 ký số (có thể bắt đầu với 0) 01, 02 đến 09 đến 31 D Có 3 ký tự viết tắt đại diện cho thứ trong tuần Mon, Tue đến Sun j Ngày của tháng, không bắt đầu với 0 1, 2 đến 9 đến 31 l Tên đầy đủ của thứ trong tuần Monday, Tuesday đến Sunday N Là số đại diện cho ngày trong tuần theo tiêu chuẩn ISO-8601 1 (thứ hai) đến 7 (chủ nhật) S Có 2 ký tự thể hiện thứ tự của ngày trong tháng st, nd, rd hoặc th. Thường dùng với ký tự format j, ví dụ 5th W Là số đại diện cho ngày trong tuần 0 (chủ nhật) đến 6 (thứ bảy) z Ngày trong năm, bắt đầu từ 0 0 đến 365 Tuần (week)
W Số tuần trong năm theo tiêu chuẩn ISO-8601 Ví dụ: 42 (tuần thứ 42 trong năm) Tháng (month)
F Tên đầy đủ của tháng January đến December m Là số đại diện cho tháng (có thể bắt đầu với 0) 01 đến 12 M 3 ký tự viết tắt đại điện cho tháng Jan, Feb đến Dec n Là số đại diện cho tháng, không bắt đầu với 0 1 đến 12 t Số ngày tối đa có thể có trong một tháng 28, 29, 30, 31 Năm (year)
L Cho biết có phải là năm nhuận hay không Trả về 1 nếu năm nhuận, 0 nếu năm không nhuận Y Có 4 ký tự đại diện cho một năm Ví dụ, 1999 hoặc 2003 y Có 2 ký tự đại diện cho một năm Ví dụ, 99 hoặc 03 Giờ (time)
a Viết thường giờ am hoặc pm am hoặc pm A Viết hoa giờ AM hoặc PM AM hoặc PM g Định dạng giờ 12 tiếng và không bắt đầu với 0 1, 2 đến 12 G Định dạng giờ 24 tiếng và không bắt đầu với 0 0, 1, 2 đến 23 h Định dạng giờ 12 tiếng và bắt đầu với 0 01, 02 đến 12 H Định dạng giờ 24 tiếng và bắt đầu với 0 00, 01, 02 đến 23 i Định dạng phút bắt đầu với 0 00, 01 đến 59 s Định dạng giây bắt đầu với 0 00, 01 đến 59 u Là 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 v Là milliseconds. Tương tự như u với date() và Datetime Ví dụ: 654 Timezone
e Thể hiện múi giờ (timezone) Ví dụ: UTC, GMT, Atlantic/Azores O Chênh lệch múi giờ với giờ GMT (+0) (không có : ở giữa giờ và phút) Ví dụ: +0200 P Chênh lệch múi giờ với giờ GMT (+0) (có : ở giữa giờ và phút) Ví dụ: +02:00 T Viế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 8601 Ví dụ: 2004-02-12T15:19:21+00:00 r Định dạng thời gian theo tiêu chuẩn RFC 2822 Ví 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.
Tìm date.timezone và thay đổi timezone theo những timezone được hỗ trợ List of Supported Timezones mà bạn muốn.
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.