Vấn đề xử lý ngày tháng cực kì quan trọng khi bạn xử lý với các bài viết và đăng lên website. Ví dụ bạn cần in ra ngày tháng đăng bài viết hiển thị theo kiểu ngày / tháng / năm hoặc ngày - tháng -năm thì bắt buộc bạn phải biết cách sử dụng các hàm xử lý ngày tháng trong PHP thì mới làm được. Đó là vấn đề căn bản, vẫn còn nhiều vấn đề và tùy thuộc vào từng bài toán mà bạn sẽ có những hướng làm khác nhau.
Và trong bài này chúng ta cùng tìm hiểu một chút về cách xử lý ngày tháng trong PHP nhé.
1. Thiết lập time_zone tại Việt Nam
Để cấu hình thời gian đúng theo giờ Việt Nam thì bắt buộc ban phải thiết lập time zone cho nó. Để thiết lập time zone thì ta sử dụng cú pháp như sau:
1 | date_default_timezone_set( 'Tên Time Zone' ); |
Lệnh này sẽ ảnh hưởng tới tất cả các lệnh xử lý ngày tháng phía bên dưới nó nên để chắc chắn thì bạn nên để lệnh này ở đầu file của chương trình nhé. Ví dụ khi làm việc với Codeigniter Framework thì bạn nên để nó ở file index.php vì như vậy nó sẽ ảnh hưởng tới mọi controllers.
Để thiết lập time_zone ở Việt Nam thì bạn sử dụng lệnh sau:
1 | date_default_timezone_set( 'Asia/Ho_Chi_Minh' ); |
Để xem danh sách time zone thì bạn sử dụng đoạn code sau:
1 2 3 4 | $timezone = DateTimeZone::listIdentifiers() ; foreach ( $timezone as $item ){ echo $item . 'br/' ; } |
Chạy lên và bạn thử tìm từ khóa "Asia/Ho_Chi_Minh" thì nó sẽ có trong danh sách đó đấy :)
2. Định dạng ngày tháng với hàm date() trong PHP
BẢNG MÃ KÍCH HOẠT KHÓA HỌC RẤT RẺ
Mình đã sưu tầm các mã giám giá rất rẻ và đăng nó ơ trong bài viết này, bạn hãy vào tham khảo để xem cần kháo nào thì hãy chọn cho riêng mình nhé, Lưu ý la chỉ có tại code24h.com, bạn sẽ không thể tìm thấy ở chỗ khác.
Hàm date dùng để chuyển đổi thời gian theo format mà lập trình viên mong muốn, cú pháp như sau:
1 | date ( $format , $timestamp = 'time()' ) |
Trong đó:
- $format là định dạng mà hàm này sẽ trả về
- $timestamp là thời gian truyền vào (kiểu INT), mặc định nó sẽ lấy thời gian hiện tại (chính là hàm time()).
Về danh sách các $format thì bạn hãy vào link này nhé, khá chi tiết và đầy đủ.
Sau đây mình sẽ liệt kê một số định dạng hay sử dụng nhất.
- d: trả về ngày tháng (số)
- D: trả về ngày của tháng (tiếng Anh)
- m: trả về tháng của năm (số)
- M: Trả về tháng của năm (tiếng Anh)
- y: trả trả về năm (2 số cuối của năm)
- Y: trả về năm đầy đủ 4 số
- H: trả về số giờ (kiểu 24h)
- h: trả về số giờ (kiểu 6h)
- i: trả về số phút
- s: trả về số giây
- c: trả về thời gian kiểu ISO 8601, thường dùng tạo cho thẻ meta publish time trong SEO
- .. Còn nữa nhưng bạn hãy vào linh mình cung cấp ở trên để xem nhé.
Ví dụ: Lấy thời gian hiện tại theo định dạng ngày/tháng/năm - giờ:phút:giây
Chiếu theo các định dạng ở danh sách trên thì ta sẽ có chuỗi format như sau: d/m/Y - H:i:s
Vậy mã code PHP sẽ là:
1 | echo date ( 'd/m/Y - H:i:s' ); |
Chạy lên tại thời điểm mình viết bài này sẽ có kết quả là: 07/05/2016 - 19:02:36.
3. Xử lý ngày tháng nâng cao trong PHP
Bây giờ chúng ta tìm hiểu một số cách xử lý nâng cao hay sử dụng nhất.
Truyền chuỗi vào định dạng format
Nếu bạn muốn truyền một chuỗi vào định dạng format thì tôi khuyên bạn nên đặt dấu / đằng trước mỗi ký tự, điều này sẽ giúp chuỗi không trùng với format key của PHP. Ví dụ bạn truyền vào format chuỗi "Bây giờ là H giờ" thì chữ i chính là số phút nên kết quả sẽ không như mong đợi.
1 | echo date ( 'Bây giờ là H giờ' ); |
Chạy lên kết quả sẽ là: 840â16 710ờ Saturdayà 19 710ờ
Nhưng nếu sửa code lại như sau:
1 | echo date ( 'Bây giờ là H giờ' ); |
Thì kết quả sẽ là: Bây giờ là 19 giờ
Chuyển đổi thời gian sang kiểu INT
Để chuyển đổi thời gian sang kiểu INT thì ta sử dụng hàm strtotime($time), ví dụ:
1 | echo strtotime ( date ( 'Y-m-d H:i:s' )); |
Kết quả trong máy mình sẽ là:1462649606
Định dạng ngày tháng trong MySQL
Để lưu đúng định dạng ngày tháng trong MySQL thì bạn sử dụng format như sau:
1 | date ( 'Y-m-d H:i:s' ) |
Nếu bạn muốn lưu trữ ngày tạo bài viết hoặc ngày comment hoặc ngày thực hiện một thao tác gì đó thì hãy sử dụng cú pháp đó nhé.
Xử lý cộng trừ ngày tháng với hàm mktime()
Hàm mktime sẽ tính toán đưa ra ngày chính xác bởi các tham số truyền vào, cú pháp như sau:
1 | mktime ( $hour , $minute , $second , $month , $day , $year ); |
Lưu ý: Hàm này sẽ trả về thời gian kiểu INT nên bạn phải sử dụng hàm date() để chuyển đổi ra định dạng mong muốn.
Ví dụ: Cho ngày 20/11/2016, hãy cộng thêm 12 ngày nữa để xem kết quả ra bao nhiêu.
1 2 | $dateint = mktime (0, 0, 0, 11, (20 + 12), 2016); echo date ( 'd/m/Y' , $dateint ); // 02/12/2016 |
Bạn để ý nếu ngày 20 mà công thêm 12 ngày thì sẽ ra là ngày 32, lúc này tháng phải thăng lên 1 nên kết quả sẽ là: 02/12/2016
Ví dụ: Xem ngày mai, tháng tới, năm tới sẽ có ngày tháng năm bao nhiêu.
1 2 3 | $tomorrow = mktime (0, 0, 0, date ( "m" ) , date ( "d" )+1, date ( "Y" )); $lastmonth = mktime (0, 0, 0, date ( "m" )-1, date ( "d" ), date ( "Y" )); $nextyear = mktime (0, 0, 0, date ( "m" ), date ( "d" ), date ( "Y" )+1); |
4. Lời kết
Nói về ngày tháng trong PHP thì có rất nhiều hàm và nhiều cách viết khác nhau, vì vậy nội dung trong bài mình không thể trình bày hết được nên nếu trong quá trình học và lập trình bạn hãy sử dụng Google để tra cứu thêm thông tin nhé. Hy vọng qua bài tìm hiểu cách xử lý ngày tháng trong PHP này sẽ giúp được phần nào cho các bạn.