PHP计算时间并按日/夜划分

时间:2018-08-08 04:32:00

标签: php timestamp

我已经尝试找出一个星期了。我的妻子开了一家新的出租车公司,她要求我在此处编写一个简单的网页,可以按一下按钮保存时间戳,然后在下班时再按一次,然后创建第二个时间戳。 >

我有一个MYSQL数据库,其中的行包含开始时间和停止时间。我已经设法使用diff函数查看两个时间戳之间有多少时间,但现在出现了棘手的部分。

由于一天中不同时间的付款方式不同,因此我需要在更短的时间划分时间。

直到19:00,她都在“白天”工作,然后,她将“夜间”工作到第二天的06:00,然后还有“周末白天”和“周末夜间”。

因此,如果她创建一个时间戳记,其日期和时间为:2018-08-08 06:30,然后创建另一个时间戳记为2018-08-08 21:00,那么我需要一个脚本,将这些数据放入“ daytimehours = 12“” $ daytimeminutes = 30“和” $ nighttimehours = 3“” $ nighttimeminutes = 0“

我设法创建了一个几乎可以正常运行的脚本,但是它有几页长,并且针对白天,黑夜,白天等各种不同情况包含一个if语句。

那么有人对如何解决这个问题有个好主意吗?或只是指出正确的方向。我很乐意花一些钱使它工作。

2 个答案:

答案 0 :(得分:0)

我的解决方法是

<?php

date_default_timezone_set('Asia/Almaty');
$endDate     = '2018-08-08 21:00';
$startDate   = '2018-08-08 06:30';

$nightmare   = date('Y-m-d 19:00');
$startDay     = date('Y-m-d 06:00');

$diffMorning = strtotime($nightmare) - strtotime($startDate);
$diffNight   = strtotime($endDate)   - strtotime($nightmare);

echo gmdate('H:i', $diffMorning) . "\n"; // this is the difference from start day till 19:00
echo gmdate('H:i', $diffNight); // this is the difference on nightmare

$total = $diffMorning + $diffNight;
echo intval($total/3600) . " hours \n";
echo $total%3600/60 . " minutes \n";
echo $total%3600%60 . ' seconds';

您可以通过online compiler

进行检查

答案 1 :(得分:0)

给出两个日期为:

$endDate     = '2018-08-08 21:00'; 
$startDate   = '2018-08-08 06:30';

您可以使用PHP Date扩展来实现以下区别:

$start = date_create($startDate);
$end = date_create($endDate);
$boundnight = clone($end);
$boundnight->setTime(19,00);

$total_duration = date_diff($end,$start);//total duration from start to end
$day_duration = date_diff($boundnight,$start);//daytime duration
$night_duration = date_diff($end,$boundnight);// nighttime duration

您可以使用format方法以这种方式打印人类可读的字符串:

$total_duration=$total_duration->format('%H:%I');
$day_duration=$day_duration->format('%H:%I');
$night_duration=$night_duration->format('%H:%I');

在此步骤中,什么都没有了,但是您说您想以分钟为单位转换每个持续时间。因此,让我们构建一个函数:

function toMinute($duration){
    return (count($x=explode(':',$duration))==2?($x[0]*60+$x[1]):false);
}

然后您可以通过以下方式使用它:

$total_duration = toMinute($total_duration);
$day_duration = toMinute($day_duration);
$night_duration = toMinute($night_duration);

的输出 var_dump($total_duration,$day_duration,$night_duration)在这一步是:

int(870)
int(750)
int(120)