我知道可能有不同的方式使用时间戳和东西,但我很难将小时数转换成人类会理解的东西。我无权更改数据库中的任何内容。
有一个列可以保持小时数,因此它可以是 134.37 小时。现在我无法显示并告诉用户134.37小时内会发生某些事情我需要将其转换为数月,日,小时,分钟,秒。
例如:
给定时间: 23.33
预期结果: 0个月,0天,23小时,19分钟,48秒(不关心秒数)
现在我需要几个月和几天,因为小时数可能很大。我开始使用的代码确实给了我小时,分钟和秒的数量,但我不能得到几天和几个月。
$months = $days = $hour = $min = $sec = 0;
$decimalHours = 23.33;
//convert to hours
$hour = (int)$decimalHours;
$decimalHours -= $hour;
//convert to minutes and subtract minutes
$decimalHours *= 60;
$min = (int)$decimalHours;
$decimalHours -= $min;
$decimalHours = number_format($decimalHours, 10);
//convert to seconds
$decimalHours *= 60;
$sec = (int)$decimalHours;
echo $hour . ' hours, ' . $min . ' minutes, ' . $sec . ' seconds';
如果你知道一个功能或更简单的方法,请提供帮助。
答案 0 :(得分:3)
一个月有多长? 30
天? 31
天? 30.5
天? 365.24 / 12
?
跳过这个,你可以这样做:
$hours = 23.33;
$days = floor($hours / 24);
$remaining_hours = $hours - $days * 24;
$hours = floor($remaining_hours);
$minutes = round(($remaining_hours - $hours) * 60);
echo $days . " days " . $hours . " hours " . $minutes . " minutes";
// 0 days 23 hours 20 minutes
答案 1 :(得分:2)
您可以使用DateTime
扩展程序实现此目的:
$hours = 23.33;
$zero = new DateTime('@0');
$offset = new DateTime('@' . $hours * 3600);
$diff = $zero->diff($offset);
echo $diff->format('%m Months, %d Days, %h Hours, %i Minutes');
代码new DateTime('@0');
使用时间戳DateTime
创建0
个对象,即January 1 1970 00:00:00 GMT
。时间戳0
是自Unix纪元以来的零秒数。
在这个例子中,它基本上与你如何创建DateTime
对象无关,我只是希望它在UTC偏移量和忽略DST。您还可以创建DateTime
对象,例如new DateTime('UTC');
(这是UTC时区中的当前日期时间)或熟悉的东西。
修改强>
我想我可以忽略几个月并且显示天+小时+分钟优于小时
在这种情况下,只需使用echo $diff->format('%a Days, %h Hours, %i Minutes');
即可。查看我从%d
到%a
替换天数格式的差异。阅读DateInterval::format()
这个字符的含义。您也可以直接在DateInterval
个对象上以echo $diff->days; echo $diff->h; // etc.
的形式访问参数(使用print_r($diff);
查看这些参数)。
答案 2 :(得分:0)
首先关闭小时的事情是疯狂的。我假设他们总是被调整为当前(即10小时发生的事情...... 9小时...... 8小时)
但你尝试过一种简单的php strtotime()
方法吗?使用时间戳将输出格式化为日期/时间/倒计时?
$dateFromToday = strtotime('+23.33 hours'); // get unixtimestamp from today + hours
echo date('l jS \of F Y h:i:s A', $dateFromToday); // format my date output
也许我过分简化了。
答案 3 :(得分:0)
如果您填充$datetime
变量(抱歉非常规变量名称),则适用以下代码。
此:
$original = 23.33;
$hours = floor($original);
$minutes = floor(60 * ($original - $hours));
echo sprintf('Total: %s hours, %s minutes', $hours, $minutes);
echo '<br />';
$datetime = new \DateTime('-2 hours 15 minutes');
$destined = new \DateTime(sprintf('+ %s hours %s minutes', $hours, $minutes));
echo sprintf('Scheduled Time: %s', $destined->format('Y-m-d sH:i:s'));
echo '<br />';
$interval = $destined->diff($datetime);
echo sprintf('Time Remaining: %s months, %s days, %s hours, %s minutes',
$interval->m, $interval->d, $interval->h, $interval->i);
输出:
Total: 23 hours, 19 minutes
Scheduled Time: 2014-01-04 1915:15:19
Time Remaining: 0 months, 1 days, 1 hours, 4 minutes