【问题标题】:PHP: Get the sum of a different dates in arrayPHP:获取数组中不同日期的总和
【发布时间】:2019-11-19 16:33:36
【问题描述】:

您好,我只是一个初级程序员,但我现在正在构建一个应用程序来获取总工作时间。

这里我有一个 time_start 数组,其中客户进出的阈值与 time_end

相同

日志是此人签到的地方。

            $time_start = [
                [0] => '22:00:00',
                [1] => '03:00:00',
                ];
            $time_end = [
                [0] => '02:00:00',
                [1] => '08:00:00',
                ];
            $logs = [
                [0] => '2019-07-09 22:00:00',
                [1] => '2019-07-10 02:00:00',
                [2] => '2019-07-10 03:00:00',
                [3] => '2019-07-10 08:00:00',
            ];

所以我试图得到他们在不同日期的夜班时间的总和。

我正在尝试进入:

            foreach( $logs as $check_time ){

                $attendance_date_time = date("Y-m-d",strtotime($check_time));
                $time_starts = date('Y-m-d H:i:s', strtotime("$attendance_date_time $time_start"));
                $time_ends = date('Y-m-d H:i:s', strtotime("$attendance_date_time $time_end"));
                if ( $check_time >= $time_starts && $check_time <= $time_ends )
                {
                    $time[] = $check_time;
                }else{
                    $time = null
                }

            }

假设我将获取所有日志,因为它介于 time_start 和 time_end 之间并将其存储到 $time

并总结我得到的时间。

由于我是 php 新手,他们是否有最简单的方法来获得总工作时间?因为我得到一个空值,因为它得到的 time_end 是 check_in 的日期。

【问题讨论】:

  • 求和意味着这些日期之间的总小时数是多少?
  • 是的。在给定的日志中,结果将是 9 小时
  • 怎么会是9个小时,你能解释一下吗?因为我看到了它的 5 小时
  • 2019-09-09 22:002019-09-10 02:00 等于 4hours2019-07-10 03:00:002019-07-10 08:00:00 等于 5hours
  • 由于 $logs 在 time_in 和 out 之间,它将添加到 $time 数组中。并添加每个数组。等于 9 小时

标签: php arrays loops datetime


【解决方案1】:

这是你的sn-p,

$time_start = [
    0 => '22:00:00',
    1 => '03:00:00',
];
$time_end = [
    0 => '02:00:00',
    1 => '08:00:00',
];
$logs = [
    0 => '2019-07-09 22:00:00',
    1 => '2019-07-10 02:00:00',
    2 => '2019-07-10 03:00:00',
    3 => '2019-07-10 08:00:00',
];
$time = [];
$diff = 0;
for ($j = 0; $j < count($logs); $j = $j + 2) {
    $attendance_start = date("Y-m-d", strtotime($logs[$j]));
    $attendance_end   = date("Y-m-d", strtotime($logs[$j + 1]));
    for ($i = 0; $i < count($time_start); $i++) {
        $time_starts = date('Y-m-d H:i:s', strtotime("$attendance_start " . $time_start[$i] . ""));
        $time_ends   = date('Y-m-d H:i:s', strtotime("$attendance_end " . $time_end[$i] . ""));
        if ($logs[$j] >= $time_starts && $logs[$j + 1] <= $time_ends) {
            array_push($time, $logs[$j], $logs[$j + 1]);
            // calculating diff for two alternate days
            $diff += (round((strtotime($logs[$j + 1]) - strtotime($logs[$j])) / 3600, 1));
            break;
        }
    }
}
echo $diff . " Hours";die;

Demo

输出:-

9 Hours

【讨论】:

  • 2019-09-09 22:002019-09-10 02:00 等于 4hours2019-07-10 03:00:002019-07-10 08:00:00 等于 5hours 我们有一个日期 2019-09-09 和 2019-09-10
  • @ElliotA 我已根据您的要求进行了更改。请看一下
  • 谢谢。 link 万一你能帮我解决这个问题?
【解决方案2】:

for 循环是最简单的方法

$time_start = [
  '22:00:00',
  '03:00:00',
];
$time_end = [
  '02:00:00',
  '08:00:00',
];
$logs = [
  '2019-07-09 22:00:00',
  '2019-07-10 02:00:00',
  '2019-07-10 03:00:00',
  '2019-07-10 08:00:00',
];

$totalDiff = 0;

for($i =0 ; $i < count($logs); $i = $i + 2)
{
  $startDate = strtotime($logs[$i]);
  $endDate = strtotime($logs[$i+1]);

  $diff = $endDate-$startDate;

  $totalDiff += $diff;
}

$hourDiff = $totalDiff / 3600;
echo $hourDiff . ' hours';

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2020-11-17
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多