2012-12-05 96 views
4

我希望在3個工作日之前獲得php日期。日期()獲得3個工作日前?

我發現了很多用各種文本方法獲取日期的例子,但是我發現最接近的是this one,但它返回三個日期(三天前沒有一個日期),並且需要一個get_holidays函數,代碼沒有提供。

任何人都可以幫助PHP代碼返回三個工作日之前今天?

這工作,但不佔周/週末:

date('Y-m-d', strtotime('-3 days')); // returns 2012-12-01 

這是不行的,但我想看到的內容:

date('Y-m-d', strtotime('four week days ago')); 

事實上,以上回報'1969-12-31'。如下所示:strtotime('-4 week days')前往figger。

+2

返回1969年,因爲這是時代的默認開始。換句話說 - 它不知道你試圖將四周前轉換成時間戳的意思。 –

+0

你的第二段代碼不起作用,因爲它不是一個有效的[相對時間格式](http://php.net/manual/en/datetime.formats.relative.php) –

+0

類似:http:// stackoverflow .com/questions/3093266/find-three-before-working-days-from-given-date – Lior

回答

9

你可以繼續回顧一天,直到你得到你想要的東西。我不知道這是最有效的方式,但它能夠完成任務:

$count = 0 
$day = strtotime('-1 day'); 
while ($count < 3 || date('N', $day) > 5) { 
    $count++; 
    $day = strtotime('-1 day', $day); 
} 
1

最終的答案:

對於像我這樣的新手,這是用防爆丸回答工作代碼:

function working_days_ago($days) { 
    $count = 0; 
    $day = strtotime('-1 day'); 
    while ($count < $days || date('N', $day) > 5) { 
     $count++; 
     $day = strtotime('-1 day', $day); 
    } 
    return date('Y-m-d', $day); 
} 

$three_days_ago = working_days_ago('3'); 

工程就像一個魅力!

0

我收到了上述功能的一些意想不到的結果,所以我寫了這個。參數是天數,向前(1)或向後(0)以及日期。凡是不注日期提供當天的日期將被使用:

// returned $date Y/m/d 
function work_days_from_date($days, $forward, $date=NULL) 
{ 
    if(!$date) 
    { 
     $date = date('Y-m-d'); // if no date given, use todays date 
    } 

    while ($days != 0) 
    { 
     $forward == 1 ? $day = strtotime($date.' +1 day') : $day = strtotime($date.' -1 day'); 
     $date = date('Y-m-d',$day); 
     if(date('N', strtotime($date)) <= 5) // if it's a weekday 
     { 
      $days--; 
     } 
    } 
    return $date; 
} 
0

2天前從今天:

$date = new DateTime(); 
$date->sub(new DateInterval('P3D')); 
echo $date->format('Y-m-d') . "\n"; 

2天前從特定日期:

$date = new DateTime('2000-01-20'); 
$date->sub(new DateInterval('P3D')); 
echo $date->format('Y-m-d') . "\n";