我已经尝试找出一个星期了。我的妻子开了一家新的出租车公司,她要求我在此处编写一个简单的网页,可以按一下按钮保存时间戳,然后在下班时再按一次,然后创建第二个时间戳。 >
我有一个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语句。
那么有人对如何解决这个问题有个好主意吗?或只是指出正确的方向。我很乐意花一些钱使它工作。
答案 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)