我的mysql列workTime2
的值为838:59:59
。我从数据库中获取值并使用此代码:
$work2MinutesStr = $employeeWork->workTime2;
if (strlen($work2MinutesStr) == 0) {
$work2MinutesStr = '00:00:00';
}
$work2Minutes = DateTime::createFromFormat('H:i:s', $work2MinutesStr);
$work2MinutesStr = $work2Minutes->format('H:i');
但代码在最后一行失败,错误为:Fatal error: Call to a member function format() on a non-object
DateTime类型运行良好,但无法处理此类值。 这个问题有解决方案吗?
答案 0 :(得分:1)
我认为问题在于,有时你总共超过838小时,而且超出了mysql的时间范围。没有格式可以处理PHP中的三位数小时,因此您会收到错误。
1)我认为您需要在sql查询中将时间转换为秒,并使用秒。
2)然后你可以将秒数除以3600并得到总小时数。
已更新
默认情况下,位于TIME范围之外但其他方式有效的值将被剪切到范围的最近端点。例如,' - 850:00:00'和'850:00:00'被转换为'-838:59:59'和'838:59:59'。
因此,当您获得InputStream is=mContext.getResources().openRawResource(R.raw.webviewjavascriptbridge);
String script=convertStreamToString(is)
webView.loadUrl("javascript:"+script);
小时时,已经意味着您的工作时间不正确。可能你有900多个小时,但由于MySQL中时间限制,你只能获得838:59:59
。但是,让我们说数字(839
)是正确的。当您在php中读取此值并尝试在php USING 839
格式中使用DateTime类时,由于INCORRECT时间格式,DateTime类无法正确处理此字符串(h:i:s
)。并且格式不正确,因为它具有三个数字小时数。因此,当您尝试调用此方法838:59:59
时,它会说$work2Minutes->format('H:i');
,因为DateTime无法将字符串转换为对象。
您需要使用SECONDS或其他时间类型才能获得正确的时间并正确处理它。
答案 1 :(得分:0)
将您的小时数转换为天数,然后删除工作日?
$timeParts = explode(':', $work2MinutesStr);
$hours = $timeParts[0];
$days = floor($hours / 24);
$daysHours = $days * 24;
$timeParts[0] = $timeParts[0] - $daysHours;
echo $timeParts[0] . ':' . $timeParts[1];