我正在创建一个时间表,显示预期和实际时间。
持续时间保存如下
23:15
- 23小时15分钟
25:45
- 25小时45分钟
我需要弄清楚两者之间的小时和分钟差异(加工时间)
我试过以下
$acutal=='23:15';
$expected=='25:45';
$start_time = new DateTime("1970-01-01 $acutal:00");
$time = $start_date->diff(new DateTime("1970-01-01 $expected:00"));
这确实有效,但是当小时数超过24:00时会抛出错误(显然是因为它正在读取时间)
带有消息'DateTime :: __ construct()的未捕获异常'Exception': 无法解析时间字符串(1970-01-01 25:45:00)
还有其他办法吗?
答案 0 :(得分:3)
您可以检查小时数是否大于24小时,如果是,请添加一天,然后删除24小时。
$actual='23:15';
$expected='25:45';
$day = 1;
list($hrs, $min) = explode(':', $expected);
if ($hrs > 24) { $day += 1; $hrs -= 24; }
$start_time = new DateTime("1970-01-01 $actual:00");
$time = $start_time->diff(new DateTime("1970-01-$day $hrs:$min:00"));
echo $time->format('%hh %Im');
输出:
2h 30m
另请注意,==
用于比较,而不是分配。
如果有48小时或更长时间,您还可以if ($hrs > 24)
更改while()
。
修改的
正如@CollinD指出的那样,如果时间超过了一个月的天数,它就会失败。这是另一种解决方案:
$actual='23:15';
$expected='25:45';
list($hrs, $min) = explode(':', $actual);
$total1 = $min + $hrs * 60;
list($hrs, $min) = explode(':', $expected);
$diff = $min + $hrs * 60 - $total1;
$start_time = new DateTime();
$expected_time = new DateTime();
$expected_time->modify("+ $diff minutes");
$time = $start_time->diff($expected_time);
echo $time->format('%hh %Im');
答案 1 :(得分:0)
您可以尝试使用日期时间函数,但对于我来说,将时间视为字符串,使用拆分或爆炸来获取小时和分钟,转换为整数,获得分钟数并将其转换回数小时似乎更直接和分钟(整数除以60和余数)。
from py4j.java_gateway import java_import
from binascii import b2a_base64
jvm = sc._gateway.jvm
java_import(jvm, "org.apache.hadoop.hbase.client.Scan")
java_import(jvm, "org.apache.hadoop.hbase.util.Bytes")
java_import(jvm, "org.apache.hadoop.hbase.protobuf.ProtobufUtil")
to_bytes = lambda x: jvm.Bytes.toBytesBinary(x)
scan = jvm.Scan()
scan.setStartRow(to_bytes(YOUR_START_ROW))
scan.setStopRow(to_bytes(YOUR_STOP_ROW))
scan.addFamily(to_bytes(YOUR_COLUMN_FAMILY_KEY))
scan_proto_bytes = jvm.ProtobufUtil.toScan(scan).toByteArray()
scan_str = b2a_base64(str(scan_proto_bytes))
conf = {"hbase.mapreduce.inputtable" : table,
"hbase.mapreduce.scan" : scan_str,
"hbase.zookeeper.quorum" : host}
答案 2 :(得分:0)
您可以通过跟踪工作分钟数来手动完成 - 这将是准确的,也可以让您显示负差异。
<?php
// get the difference in H:mm between two H:mm
function diff_time($actual, $expected) {
$diff_mins = mins($actual) - mins($expected);
return format_mins($diff_mins);
}
// convert a HH:mm to number of minutes
function mins($t) {
$parts = explode(':', $t);
return $parts[0] * 60 + $parts[1];
}
// convert number of minutes into HH:mm
function format_mins($m) {
$mins = $m % 60;
$hours = ($m - $mins) / 60;
// format HH:mm
return $hours . ':' . sprintf('%02d', abs($mins));
}
var_dump(diff_time('23:15', '25:45'));
var_dump(diff_time('25:15', '23:45'));
输出:
string(5) "-2:30"
string(4) "1:30"
..首先,比预期少2:30,第二次1:30比预期更多。