Как я могу проверить, превышает ли текущая дата / время установленную дату / время?
Я пытаюсь написать скрипт, который будет проверять, если текущая дата / время прошло 05/15/2010 at 4PM
Как я могу использовать функцию date() в PHP для выполнения этой проверки?
6 ответов
Поскольку PHP >= 5.2.0, вы можете использовать DateTime
класс как таковой:
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
}
Строка, переданная конструктору DateTime, анализируется в соответствии с этими правилами.
Обратите внимание, что также можно использовать time
а также strtotime
функции. Смотрите оригинальный ответ.
Также есть класс DateTime, который реализует функцию для операторов сравнения.
// $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';
}
Диапазон объектов dateTime составляет от 292 миллиардов лет в прошлом до того же в будущем. Функция отметки времени имеет предел (начинается с 1970 до 2038, если я правильно помню).
Проверьте PHP strtotime
-функция для преобразования вашей установленной даты / времени в метку времени: http://php.net/manual/en/function.strtotime.php
Если strtotime
не может правильно обработать ваш формат даты / времени ("4:00PM", вероятно, будет работать, но не "в 4PM"), вам нужно использовать строковые функции, например substr
проанализировать / исправить ваш формат и получить вашу метку времени с помощью другой функции, например mktime
,
Затем сравните полученную метку времени с текущей датой / временем (if ($calulated_timestamp > time()) { /* date in the future */ }
), чтобы увидеть, находится ли установленная дата / время в прошлом или будущем.
Я предлагаю прочитать PHP-документ по функциям date / time и вернуться сюда с некоторыми исходными кодами, как только вы застряли.
У меня была проблема со сравнением этой даты, и мне нужно отрегулировать
function getDatetimeNow() {
$tz_object = new DateTimeZone('Europe/Belgrade');
$datetime = new DateTime();
$datetime->setTimezone($tz_object);
return $datetime->format('Y\-m\-d\ h:i:s');
}
$currentDate = getDatetimeNow();
$dtA = new DateTime($currentDate);
$dtB = new DateTime($date);
if ( $dtA > $dtB ) {
$active = 0;
return $active;
}
else {
$active = 1;
return $active;
}
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;
}