Hàm so sánh thời gian trong PHP
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 db if($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 — PeterCâu trả lời: 80trong 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 / 14Davo, 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 = new DateTime($today); $expire_dt = new DateTime($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ồnNế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 23Chỉ để khen những câu trả lời đã được đưa ra, xem ví dụ sau: $today = new DateTime(""); $expireDate = new DateTime($row->expireDate); //from database if($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 6Tô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 2Bạ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. <=<>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 db if(($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 -1Tì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))/86400Và 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 1d-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 -1Nế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 = new DateTime("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 -2trướ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. |