微时间到秒或小时或分钟的转换[重复]
Posted
技术标签:
【中文标题】微时间到秒或小时或分钟的转换[重复]【英文标题】:microtime to seconds or hours or min conversion [duplicate] 【发布时间】:2011-09-22 00:37:36 【问题描述】:我将存储开始时间为 microtime(),结束时间为 microtime() 到数据库中。
现在我想计算脚本执行所需的秒数/分钟数/小时数。
在 php 中我该怎么做?
【问题讨论】:
【参考方案1】:基本上是这样的:
echo date("H:i:s",$endtime-$starttime);
$endtime-$starttime
以秒为单位给出持续时间,date 用于格式化输出。听起来像在数据库中保存和读取不是你的问题,所以我在我的例子中省略了它。请注意,您必须使用microtime(true)
才能使其正常工作,而microtime()
的空格分隔输出则不能那么容易进行计算。
编辑:您也可以自行完成所有计算。这只是这样的基本数学:
$duration = $endtime-$starttime;
$hours = (int)($duration/60/60);
$minutes = (int)($duration/60)-$hours*60;
$seconds = (int)$duration-$hours*60*60-$minutes*60;
【讨论】:
您的第一个示例并不总是有效。microtime
返回一个 unix 时间戳,它显然从 1/1/70 00:00:00 UTC 开始。如果$endtime - $starttime
大于 24 小时,则返回的差异时间戳将表示 2/1/70 01:00:00 UTC(假设它正好是 25 小时)。将其格式化为H:i:s
将得到01:00:00
,这似乎是一小时。
另外,在您的第二个示例中可能值得指出 microtime()
返回一个 timestamp<space>microseconds
字符串 - 您无法对此进行数学运算,因此您需要使用 microtime(true)
得到一个浮动
哦,谢谢亚当的提示,我没想到,但你说得对:如果持续时间超过 24 小时,我的第一个解决方案就行不通 - 一个会必须添加“d”(如果需要,还必须添加“m”和“Y”)来输出天数或手动进行计算(就像我的第二个示例所示)
是的,但d
只会让你到 31 天!顺便说一句,因为 php 执行时间限制应该从不允许脚本运行那么长时间
对您的第二条评论:我在帖子中添加了提示。我假设 vinothkumar 使用 microtime(true) 来保存浮点数而不是字符串,但他没有给出确切的信息。【参考方案2】:
如果你有一个时间A
和一个时间B
,以秒为单位,那么这两个绝对时间之间的秒数是:
B - A
如果要格式化这个秒数,可以使用date
美化一下。
【讨论】:
【参考方案3】:微时间到秒或小时或分钟的转换?
microtime 是 php 函数的名称,它返回以微秒为单位的时间度量,基本上微秒可以转换为:
1 毫秒 = 1,000 微秒 1 秒 = 1,000,000 微秒 1 分钟 = 60,000,000 微秒 1 小时 = 3,600,000,000 微秒 要么 1 微秒 = 0.001 毫秒 1 微秒 = 0.000001 秒 1 微秒 = 0.0000000166666667 分钟 1 微秒 = 0.000000000277777778 小时【讨论】:
【参考方案4】:function formatPeriod($endtime, $starttime)
$duration = $endtime - $starttime;
$hours = (int) ($duration / 60 / 60);
$minutes = (int) ($duration / 60) - $hours * 60;
$seconds = (int) $duration - $hours * 60 * 60 - $minutes * 60;
return ($hours == 0 ? "00":$hours) . ":" . ($minutes == 0 ? "00":($minutes < 10? "0".$minutes:$minutes)) . ":" . ($seconds == 0 ? "00":($seconds < 10? "0".$seconds:$seconds));
【讨论】:
以上是关于微时间到秒或小时或分钟的转换[重复]的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式,用于验证不同格式的字符串,用于特殊时间转换[重复]