从SQL日期字符串获取前一个工作日PHP

问题描述:

我有一个sql格式的日期字符串(例如2017-08-05),并希望将其转换为前一个工作日。从SQL日期字符串获取前一个工作日PHP

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

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

有没有更好的(漂亮)的方式来做到这一点?或者这是PHP的方式?

+0

平日为周一至周五或任何一天? – Andreas

+0

嗨@Andreas,日期可能是任何一天,但输出应该是以前的周日(周一至周五) –

+0

当前的解决方案的工作原理,我只是觉得奇怪的是,同一个方法出现两次相同的方法,成为更好的解决方案 –

同样可以只用一个呼叫strtotime来实现:

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

这很好,很简单,但它给你一个'字符串'。如果您更喜欢操作对象,则应该使用DateTime,DateTimeImmutable和DateInterval来实现结果。 – localheinz

尝试这种情况:

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

为了参考,见:

有关示例,请参见:

通过使用Carbon

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

或者,如果你想同一开头

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

您可以创建一个碳

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

没有更好的办法那么这...