Jak mogę sprawdzić, czy aktualna data / godzina minęła od ustawionej daty / godziny?


115

Próbuję napisać skrypt, który sprawdzi, czy aktualna data / godzina minęła 05/15/2010 at 4PM

Jak mogę użyć funkcji date () w PHP do wykonania tego sprawdzenia?

Odpowiedzi:


228

Od PHP> = 5.2.2 możesz używać DateTimeklasy jako takiej:

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
}

Ciąg przekazany do konstruktora DateTime jest analizowany zgodnie z tymi regułami .


Zwróć uwagę, że możliwe jest również użycie timei strtotimefunkcje. Zobacz oryginalną odpowiedź .


6
timestamp ma pewne ograniczenia mate, a także kilka błędów, na przykład znacznik czasu nie może obsłużyć daty przed 1970 i po 2038 (patrz odpowiedź Ivara Kostera)
Steel Brain

1
Często widzimy nadużywanie nowej DateTime () bez parametru, jeśli używasz dat UTC (tak jak powinieneś), wolisz używać new DateTime ("now", new DateTimeZone ('UTC')). Zapobiegnie to niezrozumiałym błędom w datach w Twojej aplikacji. radzę przechowywać to w statycznej zmiennej funkcji, statycznej klasie lub w innym miejscu w działającym procesie ...
Loenix

Co się stanie, jeśli mamy już obiekt DateTime i chcemy wiedzieć, czy minęło, ponieważ nie możemy przekazać obiektu do konstruktora DateTime, jak sugerowałeś? czy powinniśmy użyć jego getTimestamp () i porównać go z czasem ()? @Salman A
user4271704

@ user4271704 To new DateTime('2010-05-15')tylko przykład, może to być dowolny obiekt DateTime zainicjowany wcześniej.
Salman A,

zakładając, że $objectjest to obiekt DateTime, użyłem if (new DateTime() > $object) {}i działa nieprawidłowo. Ale if (time() > $bject->getTimeStamp()) {}działa poprawnie. @Salman A
user4271704

77

Istnieje również klasa DateTime, która implementuje funkcję dla operatorów porównania.

// $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
Jakie funkcje realizuje w tym celu?
still_dreaming_1

6

Sprawdź strtotimefunkcję PHP, aby przekonwertować ustawioną datę / godzinę na znacznik czasu: http://php.net/manual/en/function.strtotime.php

Jeśli strtotimenie możesz poprawnie obsłużyć formatu daty / godziny („16:00” prawdopodobnie będzie działać, ale nie „o 16:00”), musisz użyć funkcji ciągów, np. substrDo przeanalizowania / poprawienia formatu i pobrania znacznika czasu przez inna funkcja, np mktime.

Następnie porównaj wynikowy znacznik czasu z bieżącą datą / godziną ( if ($calulated_timestamp > time()) { /* date in the future */ }), aby sprawdzić, czy ustawiona data / godzina przypada w przeszłości czy w przyszłości.

Proponuję przeczytać dokumentację PHP na temat funkcji daty / czasu i wrócić tutaj z częścią kodu źródłowego, gdy utkniesz.


zobacz odpowiedź Ivara Kostera
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;
}

Z pewnością to nie zadziała tak $myDate, jak będzie równe string (0) "".
Nikola Petkanski
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.