簡體   English   中英

使用Date()計算三個工作日前?

[英]Using Date() to calculate three working days ago?

我希望在三個工作日前獲得一個PHP日期。

我找到了很多通過各種文本方法獲取日期的例子,但我找到的最接近的是這一個 ,但它返回三個日期(不是一個日期,三天前)並且需要一個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')

你可以繼續回去一天,直到你得到你想要的。 我不確定這是最有效的方法,但它完成了工作:

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

最終答復:

對於像我這樣的新手,這是使用Explosion Pills答案的工作代碼:

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');

奇跡般有效 !

我從上面的函數中得到了一些意想不到的結果,所以我寫了這個。 參數是天數,前進(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;
}

3天前從今天開始:

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

3天前從特定日期:

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

得到功能后的一天↓

function working_days($days){
            $day = strtotime(date('Y-m-d'));
            for ($x=0;$x<$days;$x++) {
                $day = strtotime('+1 day', $day);
                if (date('N', $day) > 6) {
                    $x = $x - 1;
                }
            }
            return date('Y-m-d',$day);
        }
       print_r( working_days(25));
    }

暫無
暫無

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

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