我正在使用Doctrine作为我的应用程序的ORM。在表格中我有一个'start_date'。
在php中,我可以在约会前3天计算:
date('l jS F (Y-m-d)', strtotime('-3 days'));
但这包括周末,我想只包括工作日。
即。如果活动是在星期三,我会在星期天收到一封提醒电子邮件。我宁愿在星期五收到提醒电子邮件。那么我如何计算只使用Mon-Fri进行计算?
如果你也知道如何在Oracle中做到这一点,那就太棒了。
我更喜欢在php中使用它,所以我不必使用自定义的oracle函数(如果我希望更改数据库引擎),但是在oracle中知道也是有用的: - )
谢谢你们。
答案 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
这使得排除星期六和星期日变得微不足道。
然而,“营业日”的确切定义可能因地点(以及企业对企业)而有很大差异,因此在这种情况下,我建议使用数据库表来保存特定的营业日期(作为实际日期) )。