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

上記の現在の時刻で次のコードを実行すると、2行目の「まもなく開始」が正しく表示されますが、2行目ですでに開始されていると誤って表示されます。

このコードを編集して、次の 2 時間以内に開始されるに対してのみ「まもなく開始」メッセージを返すにはどうすればよいですか?

$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

2 番目の句 ( ) に$diff一致するものはすべて、最初の句 ( )によって既にキャッチされており、その句の 2 番目の句に到達することはありません。if< 0if< 7200ifelse

解決策として、次の方法でコードを再構築します。

$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 に答える