执行2天时PHP strotime问题

执行2天时PHP strotime问题,php,strtotime,Php,Strtotime,我目前遇到strotime()函数中的一个问题。我正在为我的工作准备一个时间表,在那里用户可以输入他们的工作时间,脚本可以从xml文件中获取所有变量并生成pdf。。。到目前为止工作都很顺利,但进入夜班时出现了一个奇怪的问题 因此,我设计了一个调试示例,其中用户在21:00(晚上9点)开始工作,并在06:00(早上6点)完成。 我想得到准确输入的工作时间,所以我每次都strotime(),并对它们进行比较 我猜问题是因为开始时间在第1天,结束时间在第2天,但脚本认为它仍然在第1天。。。对不起,我没

我目前遇到
strotime()
函数中的一个问题。我正在为我的工作准备一个时间表,在那里用户可以输入他们的工作时间,脚本可以从xml文件中获取所有变量并生成pdf。。。到目前为止工作都很顺利,但进入夜班时出现了一个奇怪的问题

因此,我设计了一个调试示例,其中用户在21:00(晚上9点)开始工作,并在06:00(早上6点)完成。 我想得到准确输入的工作时间,所以我每次都
strotime()
,并对它们进行比较

我猜问题是因为开始时间在第1天,结束时间在第2天,但脚本认为它仍然在第1天。。。对不起,我没有找到任何解决办法,所以我希望这里有人能帮我

示例代码:

<?php

set_time_limit(0);
date_default_timezone_set('Europe/Berlin');

$start = '20:30';
$finish = '06:30';
$break_1_Start = '20:45';
$break_1_End = '21:00';
$break_2_Start = '00:00';
$break_2_End = '00:30';
$break_3_Start = '03:00';
$break_3_End = '03:30';
$break_4_Start = '06:00';
$break_4_End = '06:15';

/**
 * Minus when + 1 day
 */
$workTime = strtotime($finish) - strtotime($start);

$break1 = strtotime($break_1_End) - strtotime($break_1_Start);
$break2 = strtotime($break_2_End) - strtotime($break_2_Start);
$break3 = strtotime($break_3_End) - strtotime($break_3_Start);
$break4 = strtotime($break_4_End) - strtotime($break_4_Start);

$workTime = $workTime - $break1 - $break2 - $break3 - $break4;

$workTime = $workTime / 60;
$workTime = $workTime / 60;
echo 'Work Time: '.$workTime;

?>

编辑: 找到了一个暂时有效的解决方案,但也许有人有更好的解决方案

代码:


如果您使用的是带时间的动态日期,则在
strotime()时使用该日期和时间。
或者您可以使用虚拟日期作为:

$start = '2017-01-01 20:30';
$finish = '2017-01-02 06:30';

尝试以下解决方案

使用
$start=date(“d-m-Y H:i:s”,time())

在XML文件中保存开始/完成/中断计时时


因此,所有条目也将包含日期。不会有任何冲突。

这里我们为相反的时间添加
24小时
,当
开始时间
大于
结束时间
时。如果您没有日期,您可以使用此解决方案



因此,既要包括日期,也要包括时间。您可以使用time()函数将确切信息存储在xml中?@NoLand如果您没有日期,可以使用我的帖子。谢谢,这很有魅力。。。不知道包括日期是可能的。。。谢谢
$start = '2017-01-01 20:30';
$finish = '2017-01-02 06:30';
<?php

set_time_limit(0);
date_default_timezone_set('Europe/Berlin');

$start = '23:00';
$finish = '06:30';
$break_1_Start = '20:45';
$break_1_End = '21:00';
$break_2_Start = '00:00';
$break_2_End = '00:30';
$break_3_Start = '03:00';
$break_3_End = '03:30';
$break_4_Start = '06:00';
$break_4_End = '06:15';
if(strtotime($finish)>  strtotime($start))
{
    $workTime = strtotime($start) - strtotime($finish);
}
else
{
    $date=date_create_from_format("H:i", $finish);
    $date->add(new DateInterval('PT24H'));//added 24 hours.
    $workTime=strtotime($date->format("Y-m-d H:i:s"))-  strtotime($start);
}
/**
 * Minus when + 1 day
 */

$break1 = strtotime($break_1_End) - strtotime($break_1_Start);
$break2 = strtotime($break_2_End) - strtotime($break_2_Start);
$break3 = strtotime($break_3_End) - strtotime($break_3_Start);
$break4 = strtotime($break_4_End) - strtotime($break_4_Start);

$workTime = $workTime - $break1 - $break2 - $break3 - $break4;

$workTime = $workTime / 60;
$workTime = $workTime / 60;
echo 'Work Time: '.(float)$workTime;

?>