Сравнение двух дат в PHP и MYSQL

#php #mysql #date

#php #mysql #Дата

Вопрос:

Я хочу сравнить два значения даты и времени в PHP. Одна дата поступает из MySQL, а вторая — текущая дата. Я хочу запустить некоторый код, когда обе даты совпадают. Я попробовал приведенный ниже код, но условие удовлетворяет любому неверному времени.

 $current_datetime = date('Y-m-d H:i');
$send_date = date("Y-m-d H:i", strtotime($row['send_date'])); // suppose $row['send_date']'s value is '2016-10-17 15:00'
if($current_datetime == $send_date){
    //I want to run some code here
}else{
}
 

Что не так с кодом? Я также попытался скрыть обе даты strtotime() перед сравнением, но это вызвало у меня ту же проблему. Приведенное выше условие удовлетворяет любому времени, даже если обе даты разные.

Комментарии:

1. Как именно вы хотите их сравнить? До нескольких часов?

2. Нет, это не дублирующий вопрос, я прочитал этот вопрос, но не получил ответа на то, что я хочу, поэтому я задал новый.

3. Я хочу сравнить дату и время (часы и минуты). Я не хочу сравнивать секунды.

4. Также вы сравниваете так: $var = $row[‘send_date’]; если ((время()-(60*60*24)) == strtotime($var)){ … }

5. Каков ваш результат $row['send_date']

Ответ №1:

Попробуйте это :

 $current_datetime = date('Y-m-d H:i');
$send_date = date("Y-m-d H:i", strtotime($row['send_date'])); // suppose $row['send_date']'s value is '2016-10-17 15:00'
if(strtotime($current_datetime) == strtotime($send_date)){
    //I want to run some code here
}else{
}
 

Надеюсь, это поможет!!!!

Комментарии:

1. Что вы изменили?. Объясните правильно.

2. @AHJeebon: я преобразовал даты в формат strtotime, потому что это правильный способ сравнения значений дат.

3. @KaushaThakkar: Да, этот код работает нормально для меня. Спасибо

4. @KetanLathiya Спасибо !! не могли бы вы, пожалуйста, поставить ему зеленую галочку 🙂

Ответ №2:

Один из способов — получить временную метку Unix (секунды с момента ‘1970-01-01 00:00:00’ UTC) из MySQL, а затем работать с числами:

 $row = get_db_row("SELECT UNIX_TIMESTAMP(send_date) AS send_date_ts
  FROM table WHERE $condition");
$hours = (int) ($row['send_date_ts'] / 3600);
$current_hours = (int) (time() / 3600);
if ($hours == $current_hours) {
  // current hour
}
 

Временные метки удобны, потому что:

  • нет необходимости учитывать формат;
  • операции с числами обычно выполняются быстрее;
  • код выглядит чище.

Ответ №3:

Попробуйте это. На моем сервере все работает просто отлично, у меня есть кое-что еще, потому что они не равны. Дата, которую я получаю из базы datetime данных, — это формат типа 2015-04-13 09:03:49

 <?php
     $current_datetime = strtotime(date('Y-m-d H:i'));
     $send_date = date("Y-m-d H:i", strtotime($row['send_date'])); // suppose $row['send_date']'s value is '2016-10-17 15:00'
     if($current_datetime == $send_date){
         //I want to run some code here
         echo 'something';
     }else{ 
         echo 'something else';
     }
 

Выходной сигнал:

 echo $current_datetime . '<br/>';
2016-10-17 09:19

echo $send_date .'<br/>';    
2015-04-13 09:03

// result
something else
 

Комментарии:

1. Вы сравниваете строку с целым числом, не может работать. strtotime(date(‘Y-m-d H:i’)) никогда не равно date(«Y-m-d H:i», strtotime($row[‘send_date’])).