2016-09-05 6 views
0

мне нужно немного помочь с этим кодом:Проверьте интервал дат с StrToTime в PHP

$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

Если я не слеп, вам не хватает чего-то совершенно важного: вам нужно рассказать людям, на каком языке программирования вы говорите! Я предполагаю, что это о perl, и добавил тег к этому эффекту. Если я ошибаюсь, прошу прояснить или исправить или что-то еще! –

+0

Право, я использую php :) – Clorge32

+0

Вы пробовали это: http://stackoverflow.com/questions/365191/how-to-get-time-difference-in-minutes-in-php? – caramba

ответ

0

Я считаю, работа с 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() имеют одинаковый часовой пояс.

+1

Я сделал быструю проверку и, похоже, работает нормально, я так сильно вас люблю, tnx :))) – Clorge32

+0

Отлично. Без проблем :) –

2

Если $ ключ [ 'time_stamp'] является '2016-09-02 16:56:25', она не должна быть

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

Вместо

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

?

+0

Я уже пробовал это, но это не работает – Clorge32

+0

Я так думаю, и я думаю, что он не должен пытаться преобразовать системное время, поскольку он уже в миллисекундах. –

1

Эта линия:

$val = 45*60*1000; 

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

$val = 45*60; 
0

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

  1. минут в параметре $formatdate function должны быть указаны как i (а не)., как и вы).
  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

вот список предложений по вашему запросу.

$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"; 
    } 
Смежные вопросы