2015-05-13 3 views
1

Я использую функцию DateTime diff в функции, для этого мне нужно определить количество секунд между набором дат. У меня есть эта функция:Как использовать DateTime diff: PHP

public function CanBet($bettilltime, $bettilldate, $betsettime, $betsetdate, $amount) { 
    $can_bet = true; 
    $bettilltime = new DateTime(date("H:i:s", strtotime($bettilltime))); 
    $bettilldate = new DateTime(date("Y-m-d", strtotime($bettilldate))); 

    $betsettime = new DateTime(date("H:i:s", strtotime("H:i:s", $betsettime))); 
    $betsetdate = new DateTime(date("Y-m-d", strtotime("Y-m-d", $betsetdate))); 

    $timeDiff = $betsettime->diff($bettilltime); 
    return print $timeDiff->s; 
    $dateDiff = $betsetdate->diff($bettilldate); 
    return print $dateDiff->s; 
    if ($this->GetUserBalance() > $amount) { 
     if ($timeDiff->s >= 0) { 
      if ($dateDiff->s >= 0) { 
       $can_bet = true; 
      } 
      else { 
       $can_bet = false; 
      } 
     } 
     else { 
      $can_bet = false; 
     } 
    } 
    else { 
     $can_bet = false; 
    } 

    return $can_bet = false; 
} 

Я возвращающегося отпечатки на $ .... Diff, чтобы проверить, если они в настоящее время на значение, однако они всегда возвращают 0. Я пытался использовать ->d | ->m |->y | ->i | ->s | ->h | ->days (я понимаю что эти значения не возвращают секунды, я использовал их для тестирования), чтобы получить значение для печати из них, однако оно не показывает значение, отличное от 0, что я делаю неправильно здесь?

Примечание
Я установил окончательный возврат к ложным здесь, чтобы для меня, чтобы быть в состоянии остановить функцию, которая использует это работать, я хочу, чтобы мои ценности, где они находятся.

+1

Почему вы даже создавать отдельные данные и объекты времени для обоих bettill и betset? –

+0

@MarkBaker, мне нужно получить разницу между двумя отдельными значениями, так как это для сайта ставок, я должен быть в состоянии проверить, что пользователь не делает ставки после «выключения» гонки/встречи. Кроме того, поскольку расы/собрания имеют отдельные времена и даты, я должен иметь возможность проверять каждый отдельно. Это по запросу клиента. –

+0

Нет, я имею в виду, почему используйте '$ bettilltime = new DateTime (дата (« H: i: s », strtotime (« H: i: s », $ bettilltime))); $ bettilldate = new DateTime (дата («Ymd», strtotime («Ymd», $ bettilldate))); вместо того, чтобы создавать единый '$ bettill = новый DateTime ($ bettilldate. ''. $ Bettilltime);' –

ответ

1

Просто делать простые сравнения объектов DateTime, это должно работать (а также устраняет много ложных else проверок.

public function CanBet($bettilltime, $bettilldate, $betsettime, $betsetdate, $amount) { 
    $can_bet = false; 

    $bettilltime = new DateTime($bettilltime); 
    $bettilldate = new DateTime($bettilldate); 

    $betsettime = new DateTime($betsettime); 
    $betsetdate = new DateTime($betsetdate); 

    if ($this->GetUserBalance() > $amount) { 
     if ($betsettime <= $bettilltime) { 
      if ($betsetdate <= $bettilldate) { 
       $can_bet = true; 
      } 
     } 
    } 

    return $can_bet; 
} 

но

public function CanBet($bettilltime, $bettilldate, $betsettime, $betsetdate, $amount) { 
    $can_bet = false; 

    $bettilltime = new DateTime($bettilldate.' '.$bettilltime); 
    $betsettime = new DateTime($betsetdate.' '.$betsettime); 

    if ($this->GetUserBalance() > $amount) { 
     $can_bet = $betsettime <= $bettilltime; 
    } 

    return $can_bet; 
} 

будет возвращать точно те же результаты, что без бессмысленного раскола Дата и время

EDIT

Еще проще:

public function CanBet($bettilltime, $bettilldate, $betsettime, $betsetdate, $amount) { 
    $bettilltime = new DateTime($bettilldate.' '.$bettilltime); 
    $betsettime = new DateTime($betsetdate.' '.$betsettime); 

    if ($this->GetUserBalance() > $amount) { 
     return $betsettime <= $bettilltime; 
    } 

    return false; 
} 
+0

Это, кажется, добавляет ставку, независимо от того, в каком направлении сравнение будет ... –

+0

Будет ли ternery здесь вообще помогать? (например, '$ can_bet = ($ betsettime <= $ bettilltime)? true: false;') –

+0

Время для некоторой отладки ..... это должно работать точно так же, как я опубликовал –

Смежные вопросы