PHP或SQL在日期之前3个工作日计算

时间:2010-12-09 10:03:01

标签: php sql oracle doctrine

我正在使用Doctrine作为我的应用程序的ORM。在表格中我有一个'start_date'。

在php中,我可以在约会前3天计算:

date('l jS F (Y-m-d)', strtotime('-3 days'));

但这包括周末,我想只包括工作日。

即。如果活动是在星期三,我会在星期天收到一封提醒电子邮件。我宁愿在星期五收到提醒电子邮件。那么我如何计算只使用Mon-Fri进行计算?

如果你也知道如何在Oracle中做到这一点,那就太棒了。

我更喜欢在php中使用它,所以我不必使用自定义的oracle函数(如果我希望更改数据库引擎),但是在oracle中知道也是有用的: - )

谢谢你们。

3 个答案:

答案 0 :(得分:5)

PHP 5.3支持relative dates like weekdays,例如

echo date('Y-m-d', strtotime('-3 weekdays', strtotime('2010-12-08')));

将产生2010-12-03(星期五)而不是

echo date('Y-m-d', strtotime('-3 days', strtotime('2010-12-08')));

将产生2010-12-05(星期日)

strtotime也支持DateTime API支持的任何格式。

Afaik,需要一些体操来从Oracle内部进行计算

答案 1 :(得分:1)

日期('w')为您提供星期几的数字表示。 0(星期日)到6(saturtay)您可以检查您的日期是0还是6,然后再减去2(或1)天。

$n = 3
$timestamp = strtotime("-$n days")
$day = date('w', $timestamp);
if ($day == 0) {
    $n = $n - 2;
} else if ($day == 6) {
    $n = $n - 1;
}

$timestamp = strtotime("-$n days")

$dateString = date('l jS F (Y-m-d)', $timestamp);

抱歉,我不知道任何特定于oracle的代码。

答案 2 :(得分:1)

在Oracle中,要获取星期几(1-7),请使用以下

select to_char(sysdate, 'D')
from dual

这使得排除星期六和星期日变得微不足道。

然而,“营业日”的确切定义可能因地点(以及企业对企业)而有很大差异,因此在这种情况下,我建议使用数据库表来保存特定的营业日期(作为实际日期) )。