从PHP中的sql日期字符串获取上一个工作日

从PHP中的sql日期字符串获取上一个工作日,php,Php,我有一个sql格式的日期字符串(例如2017-08-05),希望将其转换为上一个工作日 我知道有一种strotime方法可以从特定日期获取前一个工作日,例如: date("Y m d",strtotime("-2 Weekday", strtotime("2017-08-05"))); 有更好(更漂亮)的方法吗?还是这就是PHP的方式 试试这个: // create a new instance of DateTimeImmutable $date = new \DateTimeImmutab

我有一个sql格式的日期字符串(例如
2017-08-05
),希望将其转换为上一个工作日

我知道有一种
strotime
方法可以从特定日期获取前一个工作日,例如:

date("Y m d",strtotime("-2 Weekday", strtotime("2017-08-05")));
有更好(更漂亮)的方法吗?还是这就是PHP的方式

试试这个:

// 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');
//创建DateTimeImmutable的新实例
$date=new\DateTimeImmutable('2017-08-05');
//创建一天的间隔
$interval=new\DateInterval('P1D');
//减去时间间隔,在前一天不是工作日时继续这样做
做{
$date=$date->sub($interval);
}而(5<$date->format('N');
echo$date->format('Y-m-d');
有关参考,请参阅:

有关示例,请参见:

试试这个:

// 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');
//创建DateTimeImmutable的新实例
$date=new\DateTimeImmutable('2017-08-05');
//创建一天的间隔
$interval=new\DateInterval('P1D');
//减去时间间隔,在前一天不是工作日时继续这样做
做{
$date=$date->sub($interval);
}而(5<$date->format('N');
echo$date->format('Y-m-d');
有关参考,请参阅:

有关示例,请参见:

通过使用

或者如果你想要Samway

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

或者如果你想要Samway

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

你可以创造一个碳原子

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

没有比这更好的方法了…

你可以创造一种碳

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

没有比这更好的方法了……

只需调用一次strotime即可实现同样的效果:

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

只需调用一次strotime即可实现这一点:

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

周一到周五或任何一天的工作日?嗨@Andreas,日期可以是任何一天,但输出应该是前一个工作日(周一到周五)。当前解决方案有效,我只是觉得奇怪,同一行中出现两次相同的方法,会有更好的解决方案
date(“Y-m-d”,strotime(“2017-08-05-2个工作日”))
Hi@JoeBlack,谢谢您的回复。您是否愿意将其发布为下面的答案,以便我可以接受?工作日如周一至周五或任何一天?嗨@Andreas,日期可以是任何一天,但输出应为前一个工作日(周一至周五)。当前解决方案有效,我只是觉得奇怪,同样的方法在同一行中出现了两次,会有更好的解决方案
date(“Y-m-d”,strotime(“2017-08-05-2 Weekday”)
Hi@JoeBlack,感谢您的回复。你愿意把它作为一个答案贴在下面,这样我就可以接受了吗?这很简单,但是它给了你一个
字符串。如果您更喜欢操作对象,则应使用
DateTime
DateTimeImmutable
DateInterval
来实现该结果。这很好,也很简单,但它提供了一个
字符串。如果您更喜欢操作对象,则应使用
DateTime
DateTimeImmutable
DateInterval
来获得结果。