所以我有一个脚本可以在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')));
72小时也很容易,因为它是3天。然而,32小时是一个问题,因为它是±1.3天。
总之,我如何获得32小时前的日期时间,不包括周末。
答案 0 :(得分: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);
答案 1 :(得分: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);
}
答案 2 :(得分:-2)
为什么不只是删除两天并半手动添加16小时来弥补它?
$DateTMP = date('Y-m-d h:i:s',(strtotime(date(Y-m-d)." -2 weekdays") + (60 * 60 * 16)));