问题描述
我正在尝试使用Carbon/Carbon和Cmixin\BusinessTime返回基于当前DateTime的预期到达DateTime碳对象。而且还要考虑营业时间。
我有一个整数值$days
,我将其添加到当前的DateTime中。
<?PHP
/**
* @param int $days // example defaulted to 1 day
* @return object
*/
public static function expected_delivery_date($days = 1)
{
// the current date time
$time = Carbon::Now(get_option('timezone_string'))->addBusinessDays($transit);
// return delivery date object
return $time;
}
在相同的PHP类文件Shop()
中,我使用Cmixin\BusinessTime ...设置工作时间...
<?PHP
use Carbon\Carbon;
use Cmixin\BusinessTime;
class Shop
{
public function __construct()
{
BusinessTime::enable(Carbon::class,[
'monday' => ['09:00-17:30'],'tuesday' => ['09:00-17:30'],'wednesday' => ['09:00-17:30'],'thursday' => ['09:00-17:30'],'friday' => ['09:00-17:30'],'saturday' => [],'sunday' => [],'exceptions' => [],'holidaysAreClosed' => true,'holidays' => []
]);
Carbon::setHolidaysRegion('gb-national');
}
}
new Shop();
问题在于,即使我在Shop()
PHP类中使用Cmixin\BusinessTime定义了工作时间。
使用碳链功能->addBusinessDays($days)
(see docs)时,今天(现在的时间)是星期日,这意味着应该增加2天,因为该公司今天不营业
当前expected_delivery_date()
返回明天的日期(星期一)。预期结果应为返回星期二日期,占开放时间的BusinessTime
。
非常感谢任何关于如何向Carbon DateTime对象添加天数以及如何计算关闭工作时间的想法。
解决方法
addBusinessDays
不考虑开放时间。
但是,由于您有固定的工作时间,因此可以使用->addOpenMinutes($days * (8 * 60 + 30))
要添加天数时,这取决于您的输入和业务规则,因为Carbon实例处理日期和。从星期日00:00或星期日23:59开始,您的业务逻辑是否相同,返回日期预计在什么时间。没有开放时间的任何一天都算为0,而其他所有一天(无论是开放还是1分钟)都算为1?