1

这些是数据库行的输入

$current              2012-07-26 15:30:00
1st $row['start']     2012-07-26 14:00:00
2nd $row['start']     2012-07-26 17:00:00

当我以上述当前时间运行以下代码时,我正确地得到了第二行的“即将开始”,但我也错误地在它已经开始的第二行上得到了它。

如何编辑此代码以仅将“即将开始”消息返回给将在接下来的两个小时内开始的

$diff = strtotime($row['start']) - strtotime($current);
if ($diff < 7200) {
    echo 'Starts soon';
} else if ($diff <= 0) {
    echo 'Started';
} else {
    echo 'Starts';
}
4

1 回答 1

1

所有$diff匹配您的第二个if子句 ( < 0) 已经被第一个if子句 ( < 7200) 捕获,并且永远不会到达该子句中的第二个if子句else

作为一种解决方案,请按以下方式重构您的代码:

$diff = strtotime($row['start']) - strtotime($current);
if ($diff <= 0) {
    echo 'Started';
} else if ($diff < 7200) {
    echo 'Starts soon';
} else {
    echo 'Starts';
}

编辑

关于评论中的问题:

如果您指的是日历日,则可以使用以下代码:

if ( date( 'zY', $current ) == date( 'zY', $row['start'] ) {
  // same day
} else {
  // different days
}

如果您的意思只是两个时间相隔不超过 24 小时,请使用

if ( abs($current - $row['start']) < 24 * 60 * 60 ) {
  // same day
} else {
  // different day
}
于 2012-07-26T12:49:54.017 回答