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

如何在碳的两个日期之间在几分钟内获得差异周末除外

如何解决如何在碳的两个日期之间在几分钟内获得差异周末除外

如何在几分钟内获得两个日期之间的差异,但不包括周末(周六和周日)

<?PHP
require_once __DIR__ . '/autoload.PHP';

use Carbon\Carbon;
use Carbon\CarbonInterval; 

$created = Carbon::parse("2021-04-11 00:07:13");
$firstResponse = Carbon::parse("2021-04-12 12:35:04");

$diffInMinutes = $created->diffFiltered(CarbonInterval::minute(),function($date){
  return !$date->isWeekend();
},$firstResponse);

echo $diffInMinutes;

错误信息是 Carbon error: Could not find next valid date

谁能帮帮我?谢谢。

解决方法

这实际上发生在达到最大循环数 (NEXT_MAX_ATTEMPTS = 1000) 时,由于周末的分钟数,这里会发生这种情况。

虽然您的方法在理论上是正确的,但它会减慢并在多天的间隔内每分钟迭代一次。

您宁愿按天计算,直到一天结束,如果不是周末,则添加 diffInMinutes,然后在第二天再次计算。

use Carbon\CarbonImmutable;

$created = CarbonImmutable::parse("2021-04-11 00:07:13");
$firstResponse = CarbonImmutable::parse("2021-04-12 12:35:04");
$diffInMinutes = 0;
$step = $created;

while ($step < $firstResponse) {
    if ($step->isWeekend()) {
        $step = $step->next('Monday');

        continue;
    }

    $nextStep = min($firstResponse,$step->addDay()->startOfDay());

    $diffInMinutes += $step->diffInMinutes($nextStep);
    $step = $nextStep;
}

echo $diffInMinutes;

注意:警告,如果使用 Carbon 而不是 CarbonImmutable,您需要将 $step = $created; 替换为 $step = $created->toImmutable();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?