簡體   English   中英

PHP或SQL計算日期前3個工作日

[英]PHP or SQL calculate 3 working days before a date

我將Doctrine用於我的應用程序的ORM。 在表中,我有一個“開始日期”。

在php中,我可以計算日期前3天:

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

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

即,如果活動在星期三進行,我將在星期日收到提醒電子郵件。 我寧願在星期五收到提醒電子郵件。 那么如何計算僅使用星期一至星期五進行計算呢?

如果您也知道如何在Oracle中進行操作,那將是非常棒的。

我希望在php中擁有它,因此我不必使用自定義的oracle函數(以防我想更改數據庫引擎),但是在oracle中了解它也會很有用:-)

多謝你們。

PHP 5.3支持相對日期 ,例如工作日 ,例如

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(星期日)

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

Afaik,需要一些體操運動才能從Oracle內部進行此計算

date('w')為您提供星期幾的數字表示。 0(星期日)至6(星期六),您只需檢查您的日期是0還是6,然后再減去2(或一)天。

$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特定代碼。

在Oracle中,要獲取星期幾(1-7),請使用以下命令

select to_char(sysdate, 'D')
from dual

這使得排除周六和周日變得微不足道。

但是,“工作日”的確切定義可能因位置而異(並且因業務而異),因此,在這種情況下,我建議使用一個數據庫表來保存特定的工作日期(作為實際日期)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM