2017-08-07 103 views
0

我有一個sql格式的日期字符串(例如2017-08-05),並希望將其轉換爲前一個工作日。從SQL日期字符串獲取前一個工作日PHP

我知道有是strtotime方法,我可以從一個特定的日期得到以前的工作日,如:

date("Y m d",strtotime("-2 Weekday", strtotime("2017-08-05"))); 

有沒有更好的(漂亮)的方式來做到這一點?或者這是PHP的方式?

+0

平日爲週一至週五或任何一天? – Andreas

+0

嗨@Andreas,日期可能是任何一天,但輸出應該是以前的週日(週一至週五) –

+0

當前的解決方案的工作原理,我只是覺得奇怪的是,同一個方法出現兩次相同的方法,成爲更好的解決方案 –

回答

1

同樣可以只用一個呼叫strtotime來實現:

date("Y m d", strtotime("2017-08-05 -2 Weekday")) 
+0

這很好,很簡單,但它給你一個'字符串'。如果您更喜歡操作對象,則應該使用DateTime,DateTimeImmutable和DateInterval來實現結果。 – localheinz

0

嘗試這種情況:

// create a new instance of DateTimeImmutable 
$date = new \DateTimeImmutable('2017-08-05'); 

// create a one-day interval 
$interval = new \DateInterval('P1D'); 

// subtract the interval, and keep doing that while the day before is not a weekday 
do { 
    $date = $date->sub($interval); 
} while (5 < $date->format('N')); 

echo $date->format('Y-m-d'); 

爲了參考,見:

有關示例,請參見:

1

通過使用Carbon

Carbon::parse('2017-08-05')->previousWeekday() 

或者,如果你想同一開頭

Carbon::parse('2017-08-05')->subWeekday(2)->toDateString() 
0

您可以創建一個碳

carbon::parse('2012-08-05')->previousWeekday(); 

沒有更好的辦法那麼這...