微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用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?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?