Мне нужна небольшая помощь с этим кодом:

$key['time_stamp'] = '2016-09-02 16:56:25';
$datetime1 = strtotime(date($key['time_stamp']));
$datetime2 = strtotime(date('Y-m-d H:m:s'));
$interval = $datetime2 - $datetime1;
$val = 45 * 60 * 1000;

if ($interval > $val) { }

Моя цель - проверить, больше ли $interval между двумя датами 45 минут.

$key['time_stamp'] - это 2016-09-02 16:56:25, а datetime2 - текущая дата и время. Почему условие if никогда не выполняется ?!

Я что-то глупое упустил что ли ?!

0
Clorge32 5 Сен 2016 в 12:54

5 ответов

Лучший ответ

Мне легче рассуждать о работе с объектами DateTime(), и они прозрачно сопоставимы в операторе if.

Хочу предложить альтернативный подход:

<?php

$key['time_stamp'] = '2016-09-02 16:56:25';

$then = new DateTime($key['time_stamp']);
$interval = new DateTime('-45 minutes');

if ($then < $interval) {
    echo 'interval passed';
} else {
    echo 'interval not passed';
}

Это дает:

интервал пройден

Надеюсь это поможет :)

Одно предостережение, которое неприменимо в вашем случае, но о нем стоит упомянуть: если вы создаете объект DateTime() с меткой времени UNIX, используя DateTime::createFromFormat() убедитесь, что оба объекта DateTime() имеют одинаковый часовой пояс.

0
Darragh Enright 5 Сен 2016 в 10:50

Если $ key ['time_stamp'] - '2016-09-02 16:56:25', не должно быть

$datetime1  = strtotime ( $key['time_stamp'] );

Вместо того

$datetime1  = strtotime ( date ($key['time_stamp']) );

?

2
Mateusz Szymik 5 Сен 2016 в 10:18

Вы сделали две ошибки:

  1. минуты в параметре $format функции date функции должны быть выражены как i (а не m, как вы).
  2. $interval измеряется в секундах (так что вам не нужно умножать на 1000, как если бы они были миллисекундами).

Итак, ваш код должен быть написан следующим образом:

$key['time_stamp'] = '2016-09-02 16:56:25';
$datetime1 = strtotime(date($key['time_stamp']));
$datetime2 = strtotime(date('Y-m-d H:i:s'));
$interval = $datetime2 - $datetime1;
$val = 45 * 60;

if ($interval > $val) { }
0
Alessio Cantarella 5 Сен 2016 в 10:35

Вот решение вашего запроса.

$key['time_stamp'] = "2016-09-02 16:56:25";
   $datetime1 = strtotime ( date ($key['time_stamp']) );
   $datetime2  = strtotime ( date('Y-m-d H:i:s'));

   $interval   = round(($datetime2 - $datetime1)/ 60); //interval in minutes

   $val = 45; //45 minutes
   if ($interval > $val) {
     echo "Success";
   } 
0
AddWeb Solution Pvt Ltd 6 Сен 2016 в 08:34

Эта строка:

$val = 45*60*1000;

Дает 45 минут в миллисекундах, я думаю, вы хотите:

$val = 45*60;
1
Toto 5 Сен 2016 в 10:22