Hướng dẫn dùng expiration time trong PHP

  1. Tính ngày hết hạn bằng PHP

    Trong CSDL mình có một cột là ngày hết hạn: expire, bây giờ mình muốn làm một trang mà hiện những ngày trước và sau khi hết hạn là 10 ngày, tức là 10 < expire < 10. Mình làm mãi mà không được.Mong các bạn giúp mình với....


  2. - trước tiên bạn cần lấy thời gian từ cơ sở dữ liệu ra rồi đổi ra ngày( cái này dùng hàm date() thì phải)
    - lầy ngày hiện tại.
    -> 10 < ngày hiện tại - ngày trong cơ sở dữ liệu < 10



  3. hu hu mình làm thế rồi mà sao ko đc?trong CSDL là theo kiểu yyyy/mm/dd đó bạn.Help me...
    Hướng dẫn dùng expiration time trong PHP


  4. bạn xem ở đây và chú ý tới date_format:
    http://www.php.net/manual/en/ref.datetime.php
    Và giá trị là chuỗi ký tự nên ta cũng có thể sử lý kiểu string.


  5. Lấy ngày hết hạn trừ cho ngày hiện hành nếu =10 hoặc =-10 là lấy được hai trường hợp mà


  6. để thuận tiện cho đổi ngày tính ngày, về cơ bản phải lưu dạng số -> 11 ký tự int(11)
    dùng loại dữ liệu là timestamp
    lợi ích:
    - order by date -> index trên số nguyên siêu nhanh.
    -2 tính ngày : 1 ngày = 24 * 60 * 60 = 86400 -> là số nguyên -> cứ thế mà tăng giảm tính expired chưa bao giờ đơn giảm hơn
    - ví dụ: nhà đất


  7. Hướng dẫn dùng expiration time trong PHP
    Đơn giản mà

    Hướng dẫn dùng expiration time trong PHP
    Được gửi bởi loren
    Hướng dẫn dùng expiration time trong PHP

    Trong CSDL mình có một cột là ngày hết hạn: expire, bây giờ mình muốn làm một trang mà hiện những ngày trước và sau khi hết hạn là 10 ngày, tức là 10 < expire < 10. Mình làm mãi mà không được.Mong các bạn giúp mình với....

    Đơn giản mà, cho luôn cái code

    $today = date("j F Y");
    $time = strtotime(date("j F Y"));
    $muoi_ngay_truoc = strtotime("-10 day", $time);
    echo date("j F Y", $muoi_ngay_truoc);
    echo " - ".$today." - ";
    $muoi_ngay_sau = strtotime("10 day", $time);
    echo date("j F Y", $muoi_ngay_sau);
    ?>


  8. Mình cảm ơn các bạn nhiều nhé, mình làm như sau nhưng không lúc truy vấn thì không được:
    $firstday=date('Y-m-d', strtotime('-10 day'));
    $backday=date('Y-m-d', strtotime('+10 day'));
    sau đó truy vấn lấy điều kiện là: WHERE $firstday< expire < $backday
    các bạn cho mình ý kiến với thật sự là mình làm nhiều cách mà vẫn chưa có kêt quả.Nó giống với ví dụ của bạn "bancankhong" đó, nhưng sao mình làm không được ta huhu chắc truy vấn sai rồi...vì trong CSDL lưu ngày expire theo dạng là YYYY-mm-dd, Mong các bạn giúp đỡ


  9. Theo mình ngĩ bạn nên format lại database field theo kiểu DATE là tốt nhất. Sau đó code PHP theo như bạn loren nói ở trên.

    Chúc bạn thành công!


Chuyển đổi định dạng ngày tháng năm

Định dạng ngày giờ trong PHP, chuyển ngày hiện tại hiển thị với nhiều định dạng. Có 2 format ngày tháng năm chuẩn là: “m-d-Y”: month,day,year “Y-m-d”: year, month,day

Ví dụ chuyển từ Y-m-d sang d-m-Y

Làm thế nào tôi có thể so sánh hai ngày trong PHP?

Ngày được lưu trữ trong cơ sở dữ liệu theo định dạng sau

2011-10-2

Nếu tôi muốn so sánh ngày hôm nay với ngày trong cơ sở dữ liệu để xem cái nào lớn hơn, tôi sẽ làm thế nào?

Tôi đã thử nó

$today = date("Y-m-d"); $expire = $row->expireDate //from dbif($today < $expireDate)

nhưng nó không thực sự hoạt động theo cách đó. Cách nào khác để làm điều đó?

php  date  compare  — Sarmen B. nguồn Gán ngày db cho một đối tượng DateTime và sau đó so sánh các đối tượng đó. Bạn có thể tìm thấy một ví dụ hay trong stackoverflow.com/questions/961074/ mẹo — Peter

Câu trả lời:

80

trong cơ sở dữ liệu ngày tháng trông như thế này 2011-10-2

Lưu trữ nó trong YYYY-MM-DD và sau đó so sánh chuỗi sẽ hoạt động vì "1"> "0", v.v.

Bạn đang xem: So sánh thời gian trong php

— Matthew nguồn 2 nhưng điều gì sẽ xảy ra nếu chúng trông như thế này, — 2011-10 / 14

Davo, sự so sánh dừng lại ở ký tự đầu tiên khác. Trong trường hợp này, chữ số thứ tư của "1" <"2",> — Matthew 1 Tôi xin lỗi :), đã không đủ cẩn thận. — dav sẽ làm việc sau đây 2016-03-27 11:59:47 ::: 2016-03-14 10:30:00? — shorif2000 221

Nếu tất cả các ngày của bạn là sau ngày 1 tháng 1 năm 1970, bạn có thể sử dụng một cái gì đó như:

$today = date("Y-m-d"); $expire = $row->expireDate;//from database $today_time = strtotime($today); $expire_time = strtotime($expire);if($expire_time < $today_time)

Nếu bạn đang sử dụng PHP 5> = 5.2.0, bạn có thể sử dụng lớp DateTime:

$today_dt = newDateTime($today); $expire_dt =newDateTime($expire);if($expire_dt < $today_dt)

Hoặc một cái gì đó dọc theo những dòng này.

— Hugo Peixoto nguồn

Nếu tôi nhớ lại một cách chính xác, mối quan tâm về việc 1st of January of 1970chỉ áp dụng cho các phiên bản PHP cũ chạy trên Windows và nó không bao giờ là vấn đề trên Unix.

— Álvaro González Tôi thích câu trả lời này. Đó là một sự lựa chọn tuyệt vời chuyển đổi ngày thành strtotime () — Erich García 2 Bây giờ không phải là "Nếu tất cả các ngày của bạn là sau ngày 1 tháng 1 năm 1970" và "trước năm 2038"? xem của chúng tôi cho các lỗi y2k38. strtotimesẽ trả về false cho ngày lớn hơn. stackoverflow.com/questions/2012589/ — hy Lưu ý rằng DateTimephương pháp là phương pháp ưa thích. Đối tượng đó có thể làm nhiều hơn strtotimebao giờ hết. — Machavity new DateTime("now")cũng hoạt động để lấy lại ngày hôm nay — Breith 23

Chỉ để khen những câu trả lời đã được đưa ra, xem ví dụ sau:

$today =newDateTime(""); $expireDate = newDateTime($row->expireDate);//from databaseif($today->format("Y-m-d")< $expireDate->format("Y-m-d"))

Cập nhật: Hoặc đơn giản sử dụng hàm date -school old () :

if(date("Y-m-d")< date("Y-m-d", strtotime($expire_date))) — d.raev nguồn 1 Ngày là một hàm, không phải là lớp / hàm tạo. — spdionis 2spdionis cảm ơn vì nhận xét, tôi đã thay đổi chữ in hoa để loại bỏ sự nhầm lẫn có thể. — d.raev 6

Tôi sẽ không làm điều này với PHP. Cơ sở dữ liệu nên biết, hôm nay là ngày gì (ví dụ: sử dụng MySQL-> NOW ()), do đó sẽ rất dễ dàng để so sánh trong Truy vấn và trả về kết quả, mà không có bất kỳ vấn đề nào tùy thuộc vào Loại ngày được sử dụng

SELECT IF(expireDate < NOW(),TRUE,FALSE)as isExpired FROM tableName — Dr.Molle nguồn cảm ơn nhưng tôi thực sự sử dụng date () tôi không lưu trữ ngày hôm nay trong một db — Sarmen B. 4 Nhưng bạn lưu trữ expireDate trong một db. So sánh ngày này với NOW () — Dr.Molle 4

$today = date("Y-m-d");//Y-m-d H:i:s $expireDate =new DateTime($row->expireDate);// From db $date1=date_create($today); $date2=date_create($expireDate->format("Y-m-d")); $diff=date_diff($date1,$date2);//echo $timeDiff;if($diff->days >=30)else

— Atif Mahmood nguồn 2

Đây là một cách để có được sự khác biệt giữa hai ngày trong vài phút.

// set dates $date_compare1= date("d-m-Y h:i:s a", strtotime($date1));// date now $date_compare2= date("d-m-Y h:i:s a", strtotime($date2));// calculate the difference $difference = strtotime($date_compare1)- strtotime($date_compare2); $difference_in_minutes = $difference /60; echo $difference_in_minutes; — Đồng bộ nguồn Câu hỏi đang yêu cầu so sánh 2 ngày - câu trả lời của bạn là thêm một lượng nội dung bổ sung (nghĩa là đặt trạng thái trực tuyến / ngoại tuyến) không cần thiết như một câu trả lời cho câu hỏi. Phần câu trả lời của bạn trong đó việc so sánh diễn ra gần giống như câu trả lời đã có ở đây . — crazyloonybin Cập nhật câu hỏi, tôi đã đăng câu trả lời sai trong câu hỏi sai ^^;) Nó không giống như câu trả lời, chỉ cần thêm ý kiến ​​của tôi về cách so sánh chúng và nhận được sự khác biệt trong vài phút. — Syno 1 Tôi đã xóa downvote của tôi vì bản cập nhật của bạn, bây giờ trông khá hơn nhiều :) — crazyloonybin 2

Bạn có thể chuyển đổi ngày thành dấu thời gian UNIX và so sánh sự khác biệt giữa chúng trong vài giây.

$today_date=date("Y-m-d"); $entered_date=$_POST<"date">; $dateTimestamp1 = strtotime($today_date); $dateTimestamp2 = strtotime($entered_date); $diff= $dateTimestamp1-$dateTimestamp2;//echo $diff;if($diff

<=<>0) — Shruthi đỏ nguồn 0

Tôi cũng có vấn đề đó và tôi giải quyết nó bằng cách:

$today = date("Ymd"); $expire = str_replace("-","", $row->expireDate);//from dbif(($today - $expire)> $NUMBER_OF_DAYS) — PiotrK nguồn Tại sao kỹ thuật này hoạt động nên được giải thích trong câu trả lời. — mickmackusa Vui lòng trả lời câu hỏi đã đăng của OP, không phải cách bạn giải quyết tình huống độc đáo của riêng bạn. — mickmackusa 0

Đây là guồng quay của tôi về cách có được sự khác biệt về số ngày giữa hai ngày với PHP. Lưu ý việc sử dụng "!" trong định dạng để loại bỏ phần thời gian của ngày, nhờ thông tin từ DateTime createdFromFormat mà không có thời gian .

Xem thêm: Hải Sản Phố Hà Nội - Hải Sản Phố Ở Quận Ba Đình, Hà Nội

$today =DateTime::createFromFormat("!Y-m-d", date("Y-m-d")); $wanted =DateTime::createFromFormat("!d-m-Y", $row<"WANTED_DELIVERY_DATE">); $diff = $today->diff($wanted); $days = $diff->days;if(($diff->invert)!= 0) $days =-1* $days; $overdue =(($days <0)?true:false);print "\n"; — thợ kim hoàn nguồn -1

Tìm thấy câu trả lời trên một blog và nó đơn giản như:

strtotime(date("Y"."-01-01"))-strtotime($newdate))/86400

Và bạn sẽ có được những ngày giữa 2 ngày.

— kooli nguồn Điều này dường như đang giải quyết một vấn đề khác. Xin vui lòng chỉ trả lời câu hỏi của OP. — mickmackusa -1

Điều này hoạt động vì logic so sánh chuỗi của PHP. Đơn giản là bạn có thể kiểm tra ...

if($startdate < $date)if($startdate > $date)

Cả hai ngày phải ở cùng một định dạng. Các chữ số cần được đệm bằng 0 ở bên trái và được sắp xếp theo thứ tự từ quan trọng nhất đến ít quan trọng nhất. Y-m-dvà Y-m-d H:i:sthỏa mãn những điều kiện này.

— sanjyot nguồn 1

d-m-Ysẽ không hoạt động .. Y-m-d(với số 0 hàng đầu như 2016-05-08) sẽ hoạt động. Kiểm tra những ngày đó ở d-m-Yđịnh dạng 01-10-2016và 20-02-2016, so sánh dưới dạng chuỗi 0 <2,> — Arxeiss Dưới đây là bằng chứng cho thấy kỹ thuật của bạn sẽ không so sánh chính xác ngày của OP với ngày hôm nay: 3v4l.org/SNHKT — mickmackusa

OP có định dạng ngày khác nhau. ngày trông giống như 2011-10-2.

— mickmackusa -1

Nếu bạn muốn một ngày ($ date) hết hạn trong một khoảng thời gian, ví dụ như ngày hết hạn mã thông báo khi thực hiện đặt lại mật khẩu, đây là cách bạn có thể làm:

$date = $row->expireDate; $date->add(new DateInterval("PT24H"));// adds 24 hours $now =new \DateTime();if($now < $date)

Nhưng trong trường hợp của bạn, bạn có thể thực hiện so sánh như sau:

$today = newDateTime("Y-m-d"); $date = $row->expireDate;if($today < $date) — faye.babacar78 nguồn Câu trả lời này là bỏ qua các câu hỏi được đăng ban đầu. Vui lòng sử dụng dữ liệu mẫu do OP cung cấp. — mickmackusa Đó không phải là chính xác những gì anh chàng đang yêu cầu giúp đỡ nhưng tôi nghĩ cách này có thể giúp nếu một người hiểu các nguyên tắc. — faye.babacar78 Tôi hiểu các nguyên tắc, nhưng mã này không trả lời câu hỏi được hỏi. Trang này đã đầy ắp những câu trả lời không chính xác và không liên quan - điều này chỉ khiến các nhà nghiên cứu bối rối và lãng phí thời gian của họ. Tôi đang cố gắng để ý các nhà nghiên cứu. — mickmackusa Chà, tôi nghĩ nó không khó lắm, anh ta có thể đã sử dụng lớp DateTime () thay vì hàm date (). Câu trả lời tôi đặt ở trên là bằng cách nào đó để đưa ra ý tưởng cho các nhà nghiên cứu. — faye.babacar78 1 Tôi sẽ ngừng lặp lại chính mình và từ bỏ cuộc thảo luận này. Giải pháp cao thứ 2 ( stackoverflow.com/a/3847762/2943403 ) cho thấy một cách đơn giản khủng khiếp (không thể đánh bại) để tạo hai đối tượng datetime. Tôi hoàn toàn không biết requestDate()phương pháp ma thuật của bạn làm gì - không có đề cập đến nó ở bất cứ đâu. Tôi sẽ không sử dụng câu trả lời của bạn, cũng như không khuyến nghị bất kỳ nhà nghiên cứu nào sử dụng giải pháp của bạn. Tôi không thấy mình thay đổi phiếu bầu của mình. — mickmackusa -2

trước hết, hãy thử đưa ra định dạng bạn muốn cho thời gian ngày hiện tại của máy chủ của bạn:

Có được thời gian ngày hiện tại

$ current_date = getdate ();

Ngày và giờ riêng biệt để quản lý chúng theo ý muốn:

$ current_date_only = $ current_date ."- ". $ current_date ."-". $ current_date ; $ current_time_only = $ current_date <"hours">. ":". $ current_date <"phút">. ":". $ current_date <"giây">;

So sánh nó tùy thuộc vào việc bạn đang sử dụng donly date hay datetime trong DB của bạn:

$ hôm nay = $ current_date_only. " ". $ current_time_only;

hoặc là

$ hôm nay = $ current_date_only;

if ($ hôm nay <$>

hy vọng nó giúp

— ernestoloredo nguồn Câu trả lời này làm cho không có nỗ lực để giải quyết câu hỏi ban đầu. OP không quan tâm đến giờ, phút hoặc giây. — mickmackusa Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi. Licensed under cc by-sa 3.0 with attribution required.