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é.

Nội dung chính

  • 1. Thiết lập time_zone tại Việt Nam
  • 2. Định dạng ngày tháng với hàm date() trong PHP
  • 3. Xử lý ngày tháng nâng cao trong PHP
  • Truyền chuỗi vào định dạng format
  • Chuyển đổi thời gian sang kiểu INT
  • Định dạng ngày tháng trong MySQL
  • Xử lý cộng trừ ngày tháng với hàm mktime()
  • 4. Lời kết
  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 🙂

  1. Định dạng ngày tháng với hàm date() trong PHP

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.

  1. 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 \g\i\ờ \l\à H \g\i\ờ’);

 

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);

 

  1. 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.

11 BÌNH LUẬN

  1. I think this is one of the most significant information for me.

    And i’m glad reading your article. But should remark on few general things, The website style is ideal,
    the articles is really nice : D. Good job, cheers

  2. Have you ever considered about adding a little bit more than just your articles?

    I mean, what you say is fundamental and all. However just imagine if you added some great images or video clips to give
    your posts more, “pop”! Your content is excellent but with pics and videos, this blog could undeniably be one of the very best in its niche.

    Terrific blog!

  3. Wonderful blog! I found it while browsing on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News?
    I’ve been trying for a while but I never seem to get there!
    Appreciate it

  4. I was recommended this website by my cousin. I’m not sure whether this post is written by him as nobody else know such detailed about
    my problem. You are incredible! Thanks!

  5. I’m not that much of a online reader to be honest
    but your blogs really nice, keep it up! I’ll go ahead and bookmark your website to come
    back in the future. Cheers

  6. Please let me know if you’re looking for a article
    writer for your blog. You have some really good posts and I believe
    I would be a good asset. If you ever want to take some of the load
    off, I’d really like to write some content for your blog in exchange for a link back to mine.
    Please send me an e-mail if interested. Cheers!

  7. Howdy! This article could not be written much better! Looking
    through this article reminds me of my previous roommate!
    He always kept talking about this. I most certainly will send
    this article to him. Fairly certain he will have
    a good read. Many thanks for sharing!

THOÁT KHỎI BÌNH LUẬN

Please enter your comment!
Please enter your name here