So sánh ngày tháng trong PHP

1, Giới thiệu

Hôm nay tôi gặp một vấn đề về ngày tháng trong dự án của chúng tôi, theo yêu cầu thì tôi phải xóa tất cả những sản phẩm đã hết hạn trong Database. Mỗi sản phẩm đều có 2 cột trong DB là start_dateexp_date để lưu ngày đăng kí và ngày hết hạn quảng cáo trên trang web. Cả hai cột đều lưu với kiểu Date.

Sau khi thực hiện câu truy vấn để lấy thông tin ngày hết hạn của mỗi sản phẩm, tôi sẽ có được các giá trị kiểu Date (yyyy-mm-dd) dưới dạng chuỗi (string). Việc tiếp theo là lấy 1 ngày làm mốc để có cơ sở so sánh các ngày với nhau. tôi lấy ngày hôm nay làm mốc. Như vậy nếu ngày hết hạn trước ngày hôm nay thì tôi sẽ xóa sản phẩm đó và ngược lại thì tiếp tục lưu trong Database.

2, Giải pháp

Tôi sử dụng hàm strtotime() (String to time ) trong PHP để thực hiện công việc trên. Vì sao lại sử dụng hàm đó ? Có 2 lí do

  • Sau khi truy vấn CSDL thì kiểu Date trả về dưới dạng chuỗi
  • Hàm này sẽ trả về số giây bắt đầu từ 00:00:00 ngày 01/01/1970 đến thời điểm bạn so sánh, hiểu đơn giản là nếu bạn viết strtotime(2011-08-15) thì nó sẽ trả về tổng số giây từ 00:00:00 ngày 01/01/1970 đến 15/8/2011.

3, Demo

Tôi sẽ viết 1 đoạn chương trình nhỏ để các bạn hiểu hơn

<?php
$today = date("Y-m-d");
$another_date = "2011-08-16";
if (strtotime($today) > strtotime($another_date)) {
echo "Yesterday";
} else {
echo "Tomorrow";
}
?>

Kết quả trả về là Tomorrow.

4, Kết luận

Trên đây là cách sử dụng hàm chuyển một chuỗi về dạng ngày tháng và so sánh các ngày với nhau. Tùy vào yêu cầu mà bạn có thể tùy biến hàm này theo nhiều cách khác nhau. Để tìm hiểu sâu hơn về các hàm ngày tháng tròn PHP , các bạn có thể đọc trên PHP Manual.

Tấn Việt

Tôi lập trang web này để thỏa mãn sở thích viết cái gì đó vui vui khi rãnh rỗi và đồng thời cũng chia sẻ những gì tôi biết hoặc đọc đâu đó trên mạng về Lập trình web. Tôi hi vọng những bài viết này sẽ giúp ích cho các bạn. Thân ái!

You may also like…

7 Responses

  1. hiep says:

    sao web hay the ma it nguoi truy cap nhi?

    • Chém says:

      Web ko phải là tourial nên ko thu hút người mới học. Còn người đã học thì… gặp một issue thì bạn search bằng tiếng Anh hay tiếng Việt?

      • Tấn Việt says:

        Cảm ơn bạn đã góp ý. Theo bạn thì blog của mình nên cải thiện những điểm gì để thu hút người đọc ?

        P/S: Email của bạn…haha. Làm sao bạn biết nickname đó ?

  2. quangdat says:

    cho e hoi?Vi du ngay giao hang phai lon hon ngay hien tai ak.Khi ng ta dat hang,ng ta nhap ngay giao hang nho hon nhay hien tai thi sao?

    • Tấn Việt says:

      Tức là bạn muốn khi người ta đặt hàng thì người ta phải nhập ngày giao hàng lớn hơn ngày hiện tại ? Nếu đúng như vậy thì bạn có thể tham khảo đoạn code dưới đây:

      [ccew_php]
      < ?php $hom_nay = date("Y-m-d"); $ngay_giao_hang = "2013-05-28"; //Giá trị này tôi cho cố định, bạn có thể lấy nó từ Form đặt hàng mà người dùng nhập vào if ( strtotime($hom_nay) < strtotime($ngay_giao_hang) ) { echo "Thành công"; } else { echo "Vui lòng nhập ngày giao hàng lớn hơn ngày hiện tại!"; } ?>
      [/ccew_php]

  3. Thành Nguyễn says:

    rong CSDL của mình có cột thời gian ví dụ 08/07/15 9:51 AM khi mình sử dụng hàm strototime
    $time = $row[“batdau”];
    $sqldate = strtotime($time);
    $datefull = date(“d/m/Y”, $sqldate);
    echo $datefull;
    Kết quả lại ra 15/07/2008 là sao nhỉ, muốn xuất ra đúng 08/07/2015 thì phải làm thế nào?

    • duyha says:

      ban dung ham split de tach nam thang ngay ra nhe . gia su la time cua ban luu trong DATABASE dang DATE TIME
      vd: $dates = split(‘ ‘,$row[‘batdau’]);
      $date = $date[0]; //
      list($y,$m,$d)=split(‘-‘,$date);