4

したがって、32時間、48時間、および72時間前に複数のチェックを実行するスクリプトがあります。基本的に、少なくともx時間前のエントリがないかデータベースをチェックします。

これで、次のように正常に機能します。

$date = date('Y-m-d H:i:s',strtotime('-32 hours')); 
$q    = "SELECT * FROM `table` WHERE `date` <= '".$date."'";

今、私はこれに週末を除外したいと思います。私はあなたがこの効果を得るためにあなたがweekdays内で使うことができることを知っていますstrtotime、しかしこれは何時間も機能しません。

私は次のことを簡単に行うことができるので、48時間は簡単です。

echo date('Y-m-d H:i:s',
          strtotime(date("Y-m-d H:i:s").
          " -2 weekdays ".
          date('H:i:s')));

3日なので72時間も簡単です。ただし、32時間は±1。3日であるため問題が発生します。

結論として、週末を除いて32時間前の日時を取得するにはどうすればよいですか。

4

3 に答える 3

3

最初と同じように使用strtotimeします。

$time = strtotime('-32 hours');

次に、週末/平日の計算を手動で行います。

// If the day is Sunday or Saturday subtract a full day.
while (date('w', $time) % 6 == 0) {
    $time = strtotime('-1 day', $time);
}
$date = date('Y-m-d H:i:s', $time);
于 2011-11-15T13:10:43.557 に答える
1

これが正しいのか、それとも最善の方法なのかはわかりませんが、次のようなものです。

function getDateBackExcludingWeekend( $hours ) {
  $now = time();
  $secondsBack = $hours * 3600;

  $actual = $now - $secondsBack;
  $monday = strtotime("last monday");

  if( $actual < $monday ) {
    $diff = ($secondsBack - ($now - $monday));
    $backthen = ($monday - 172800 /* two days */) - $diff;

    return date("Y-m-d H:i:s", $backthen);
  }

  return date("Y-m-d H:i:s", $actual);
}
于 2011-11-15T13:01:46.193 に答える
-2

それを補うために、2日を削除し、半手動で16時間を追加してみませんか?

$DateTMP = date('Y-m-d h:i:s',(strtotime(date(Y-m-d)." -2 weekdays") + (60 * 60 * 16)));
于 2011-11-15T12:53:03.777 に答える