Как использовать DateTime diff: переполнение стека

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

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, что я здесь делаю неправильно?

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

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;
}

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

РЕДАКТИРОВАТЬ

Еще проще:

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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]