Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP从字符串中计算小时数_Php - Fatal编程技术网

用PHP从字符串中计算小时数

用PHP从字符串中计算小时数,php,Php,我需要从php字符串计算小时数。我搜索了很多,但没有找到有效的答案和结果 $time = "9.00am-1.00pm & 2.00pm-6.00pm"; 我需要提取$time并计算所有的小时数。 如果我打印$time,那么输出应该是:8小时 提前谢谢 当然,时间值不应作为完整字符串存储到数据库中,但请尝试以下脏解决方案: $date = "9.00am-1.00pm & 2.00pm-6.00pm"; $result = explode("&", $date); $r

我需要从php字符串计算小时数。我搜索了很多,但没有找到有效的答案和结果

$time = "9.00am-1.00pm & 2.00pm-6.00pm";
我需要提取$time并计算所有的小时数。 如果我打印$time,那么输出应该是:8小时


提前谢谢

当然,时间值不应作为完整字符串存储到数据库中,但请尝试以下脏解决方案:

$date = "9.00am-1.00pm & 2.00pm-6.00pm";
$result = explode("&", $date);
$range1 = explode("-", $result[0]);
$time1 = new DateTime(date('H:i:s',strtotime($range1[0])));
$time2 = new DateTime(date('H:i:s',strtotime($range1[1])));
$diff1 = $time1->diff($time2);
$range2 = explode("-", $result[1]);
$time3 = new DateTime(date('H:i:s',strtotime($range2[0])));
$time4 = new DateTime(date('H:i:s',strtotime($range2[1])));
$diff2 = $time3->diff($time4);
$total_hours = ($diff1->h + $diff2->h);
echo $total_hours;
输出:

8
object(DateInterval)[3]
public 'y' => int 0
public 'm' => int 0
public 'd' => int 0
public 'h' => int 4
public 'i' => int 0
public 's' => int 0
public 'weekday' => int 0
public 'weekday_behavior' => int 0
public 'first_last_day_of' => int 0
public 'invert' => int 0
public 'days' => int 0
public 'special_type' => int 0
public 'special_amount' => int 0
public 'have_weekday_relative' => int 0
public 'have_special_relative' => int 0

object(DateInterval)[6]
public 'y' => int 0
public 'm' => int 0
public 'd' => int 0
public 'h' => int 4
public 'i' => int 0
public 's' => int 0
public 'weekday' => int 0
public 'weekday_behavior' => int 0
public 'first_last_day_of' => int 0
public 'invert' => int 0
public 'days' => int 0
public 'special_type' => int 0
public 'special_amount' => int 0
public 'have_weekday_relative' => int 0
public 'have_special_relative' => int 0
现在,您可以看到,作为一个对象,您有不同之处:

var_dump($diff1);
var_dump($diff2);
输出:

8
object(DateInterval)[3]
public 'y' => int 0
public 'm' => int 0
public 'd' => int 0
public 'h' => int 4
public 'i' => int 0
public 's' => int 0
public 'weekday' => int 0
public 'weekday_behavior' => int 0
public 'first_last_day_of' => int 0
public 'invert' => int 0
public 'days' => int 0
public 'special_type' => int 0
public 'special_amount' => int 0
public 'have_weekday_relative' => int 0
public 'have_special_relative' => int 0

object(DateInterval)[6]
public 'y' => int 0
public 'm' => int 0
public 'd' => int 0
public 'h' => int 4
public 'i' => int 0
public 's' => int 0
public 'weekday' => int 0
public 'weekday_behavior' => int 0
public 'first_last_day_of' => int 0
public 'invert' => int 0
public 'days' => int 0
public 'special_type' => int 0
public 'special_amount' => int 0
public 'have_weekday_relative' => int 0
public 'have_special_relative' => int 0
在本例中,您可以访问小时的值(小时、分钟、秒),例如使用:

 public 'h' => int 4

 $diff1->h

你在四个专栏中节省了时间,我想是这样的,如果那样的话,那么就这样做吧

//for moring
$my_str1    =   strtotime("9.00am");
$my_str2    =   strtotime("1.00pm");
$second    =   $my_str2-$my_str1; //get second
$minutes = $second/60; //get minutes
$morning =  $minutes/60; //get hour
晚上也一样

 //for evening
$my_str3    =   strtotime("2.00pm");
$my_str4    =   strtotime("6.00pm");
$second1    =   $my_str4-$my_str3; //get second
$minutes1 = $second1/60; //get minutes
$evening =  $minutes1/60; //get hour
然后早晚合计

$hour = $morning-$evening;

如果你已经尝试了很多,你应该展示那些尝试…否则人们不会在这里帮助你。这些时间是如何开始的?只是为了确保你在这里没有XY问题。难道不能这样做吗?我会用以下方法来处理:步骤1-将你的时间字符串分成组/范围。第2步-进一步细分组并将其转换为DateTime对象。第3步-比较时间并将其全部相加。正如其他人指出的那样;您需要展示您已经尝试过的内容。首先,您的问题是如何保存数据!如果不必要,不要只保存字符串并尝试在之后解析它们。-“兄弟”不要喂鱼。。人们需要自己尝试一些东西。