使用Nesbot Carbon将日期返回到到达对象的营业时间

问题描述

我正在尝试使用Carbon/CarbonCmixin\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?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...