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.

71 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!

  8. Yesterday, while I was at work, my cousin stole my
    iphone and tested to see if it can survive a thirty foot drop, just so she
    can be a youtube sensation. My apple ipad is now broken and
    she has 83 views. I know this is entirely off topic but I had to
    share it with someone!

  9. Hey there! This is my first comment here so I just wanted to give a quick shout out
    and tell you I genuinely enjoy reading through your posts.
    Can you recommend any other blogs/websites/forums that go over the same subjects?
    Thanks a ton!

  10. After I originally commented I seem to have clicked
    the -Notify me when new comments are added- checkbox and now every time a comment is
    added I get four emails with the exact same comment.
    Perhaps there is a means you are able to remove me from that service?
    Kudos!

  11. Definitely consider that which you stated. Your favorite justification appeared to be at the internet the
    easiest factor to have in mind of. I say to you, I definitely get irked even as other
    people think about issues that they plainly do not realize about.
    You controlled to hit the nail upon the top and also
    defined out the entire thing without having side effect ,
    other people can take a signal. Will likely be again to get
    more. Thanks

  12. Hello there! This post couldn’t be written any better! Reading this post reminds me
    of my old room mate! He always kept talking about this.

    I will forward this page to him. Fairly certain he will have a
    good read. Many thanks for sharing!

  13. I know this if off topic but I’m looking into starting my own blog and was curious what
    all is required to get set up? I’m assuming having a blog like
    yours would cost a pretty penny? I’m not very web smart so
    I’m not 100% sure. Any recommendations or advice would
    be greatly appreciated. Thank you

  14. My brother recommended I might like this website. He was totally right.
    This post truly made my day. You can not imagine just how much time
    I had spent for this information! Thanks!

  15. Hey There. I found your blog using msn. This is a very well written article.
    I’ll make sure to bookmark it and return to read more of your useful information.
    Thanks for the post. I will definitely comeback.

  16. Good day I am so delighted I found your web site,
    I really found you by mistake, while I was searching on Google for something else, Anyhow I am here now and would
    just like to say thank you for a remarkable post and a all
    round exciting blog (I also love the theme/design), I don’t
    have time to look over it all at the moment but I have saved it and
    also added in your RSS feeds, so when I have time I will be back to read
    a lot more, Please do keep up the great jo.

  17. Howdy! I know this is kinda off topic however , I’d figured
    I’d ask. Would you be interested in trading links or
    maybe guest authoring a blog article or vice-versa? My website addresses a lot of the same
    subjects as yours and I feel we could greatly benefit from each other.
    If you happen to be interested feel free to shoot
    me an e-mail. I look forward to hearing from you!
    Wonderful blog by the way!

  18. Nice post. I learn something totally new and challenging on sites I stumbleupon on a daily
    basis. It’s always exciting to read through articles from other authors and
    practice a little something from other websites.

  19. Usually I do not read post on blogs, however I wish to say that this write-up very forced me to try and do so! Your writing style has been amazed me. Thank you, very great post.|

  20. This very blog is obviously awesome as well as factual. I have picked a bunch of helpful things out of this source. I ad love to visit it every once in a while. Cheers!

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

Please enter your comment!
Please enter your name here