Làm cách nào để kiểm tra xem ngày / giờ hiện tại có quá ngày / giờ đã định hay không?


115

Tôi đang cố gắng viết một tập lệnh để kiểm tra xem ngày / giờ hiện tại đã qua 05/15/2010 at 4PM

Làm cách nào để sử dụng hàm date () của PHP để thực hiện việc kiểm tra này?

Câu trả lời:


228

Vì PHP> = 5.2.2 nên bạn có thể sử dụng DateTimelớp như vậy:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
    # current time is greater than 2010-05-15 16:00:00
    # in other words, 2010-05-15 16:00:00 has passed
}

Chuỗi được chuyển đến hàm tạo DateTime được phân tích cú pháp theo các quy tắc này .


Lưu ý rằng nó cũng có thể sử dụng timevà các strtotimechức năng. Xem câu trả lời gốc .


6
dấu thời gian có một số hạn chế và cũng có một số lỗi, chẳng hạn như dấu thời gian không thể xử lý ngày trước năm 1970 và sau năm 2038 (xem câu trả lời của Ivar Koster)
Steel Brain

1
Chúng tôi thường thấy lạm dụng DateTime mới () không có tham số, nếu bạn đang sử dụng ngày UTC (như bạn nên làm), hãy thích sử dụng DateTime mới ("bây giờ", DateTimeZone mới ('UTC')). Điều này sẽ ngăn ứng dụng của bạn khỏi các lỗi có thể hiểu nhầm về ngày tháng. tôi khuyên bạn nên lưu trữ nó trong một biến tĩnh hàm, một lớp tĩnh hoặc một nơi nào đó khác trong quá trình chạy của bạn ...
Loenix 12/10/16

Điều gì sẽ xảy ra nếu chúng ta đã có một đối tượng DateTime và chúng ta muốn biết liệu điều này đã qua hay chưa vì chúng ta không thể chuyển một đối tượng đến phương thức khởi tạo DateTime như bạn đã đề xuất? chúng ta có nên sử dụng getTimestamp () và so sánh nó với time () không? @Salman A
dùng4271704

@ user4271704 Đây new DateTime('2010-05-15')chỉ là một ví dụ, có thể là bất kỳ đối tượng DateTime nào mà bạn đã khởi tạo trước đó.
Salman A

giả sử $objectlà một đối tượng DateTime, tôi đã sử dụng if (new DateTime() > $object) {}và nó hoạt động sai. Nhưng if (time() > $bject->getTimeStamp()) {}hoạt động chính xác. @Salman Một
user4271704

77

Ngoài ra còn có lớp DateTime triển khai một hàm cho các toán tử so sánh.

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}

1
Nó thực hiện chức năng gì cho việc này?
still_dreaming_1

6

Kiểm tra strtotimechức năng của PHP để chuyển đổi ngày / giờ đã đặt của bạn thành dấu thời gian: http://php.net/manual/en/ Chức năng.strtotime.php

Nếu strtotimekhông thể xử lý đúng định dạng ngày / giờ của bạn ("4:00 chiều" có thể hoạt động nhưng không hoạt động "lúc 4 giờ chiều"), bạn sẽ cần sử dụng các hàm chuỗi, ví dụ: substrđể phân tích cú pháp / sửa định dạng và truy xuất dấu thời gian của bạn qua chức năng khác, ví dụ mktime.

Sau đó, so sánh dấu thời gian kết quả với ngày / giờ hiện tại ( if ($calulated_timestamp > time()) { /* date in the future */ }) để xem liệu ngày / giờ đã đặt là trong quá khứ hay tương lai.

Tôi khuyên bạn nên đọc PHP-doc trên date / time-functions và quay lại đây với một số mã nguồn của bạn khi bạn gặp khó khăn.


xem câu trả lời của Ivar Koster
Steel Brain

1
date_default_timezone_set('Asia/Kolkata');

$curDateTime = date("Y-m-d H:i:s");
$myDate = date("Y-m-d H:i:s", strtotime("2018-06-26 16:15:33"));
if($myDate < $curDateTime){
    echo "active";exit;
}else{
    echo "inactive";exit;
}

Chắc chắn điều này sẽ không hoạt động như $myDatesẽ bằng string (0) "".
Nikola Petkanski
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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.