Я использую функцию 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 здесь, чтобы я мог остановить работу функции, использующей это, я хочу сохранить свои значения там, где они есть.
Это должно сработать, просто делая простые сравнения объектов 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;
}
Других решений пока нет …