如何将大时间从H:i:s转换为H:我没有致命错误?

时间:2015-09-08 05:35:43

标签: php datetime

我的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类型运行良好,但无法处理此类值。 这个问题有解决方案吗?

2 个答案:

答案 0 :(得分:1)

我认为问题在于,有时你总共超过838小时,而且超出了mysql的时间范围。没有格式可以处理PHP中的三位数小时,因此您会收到错误。

1)我认为您需要在sql查询中将时间转换为秒,并使用秒。

2)然后你可以将秒数除以3600并得到总小时数。

已更新

  

默认情况下,位于TIME范围之外但其他方式有效的值将被剪切到范围的最近端点。例如,' - 850:00:00'和'850:00:00'被转换为'-838:59:59'和'838:59:59'。

Manual link

因此,当您获得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];