从SQL日期字符串获取前一个工作日PHP
问题描述:
我有一个sql格式的日期字符串(例如2017-08-05
),并希望将其转换为前一个工作日。从SQL日期字符串获取前一个工作日PHP
我知道有是strtotime
方法,我可以从一个特定的日期得到以前的工作日,如:
date("Y m d",strtotime("-2 Weekday", strtotime("2017-08-05")));
有没有更好的(漂亮)的方式来做到这一点?或者这是PHP的方式?
答
同样可以只用一个呼叫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');
为了参考,见:
- http://php.net/manual/en/class.datetimeimmutable.php
- http://php.net/manual/en/class.dateinterval.php
- http://php.net/manual/en/function.date.php
有关示例,请参见:
答
通过使用Carbon
Carbon::parse('2017-08-05')->previousWeekday()
或者,如果你想同一开头
Carbon::parse('2017-08-05')->subWeekday(2)->toDateString()
答
您可以创建一个碳
carbon::parse('2012-08-05')->previousWeekday();
没有更好的办法那么这...
平日为周一至周五或任何一天? – Andreas
嗨@Andreas,日期可能是任何一天,但输出应该是以前的周日(周一至周五) –
当前的解决方案的工作原理,我只是觉得奇怪的是,同一个方法出现两次相同的方法,成为更好的解决方案 –