我有以下简单的测试代码:
$start_time_unix = time();
$end_time_unix = time();
$seconds_diff = $end_time_unix - $start_time_unix;
$duration = round(abs($seconds_diff/1000) / 60,2);
当我将其存储在MySQL(int)中时,即使是几秒钟,结果也是很大的值,例如25634。即使几分钟之内,我怎么能得到分钟?我上面的代码有什么问题??
答案 0 :(得分:2)
首先int
无法存储分数,因此您可能想使用float
或double
来代替。
但是为什么要除以1000
。 $seconds_diff
由 seconds 组成,因此除以60
将使您节省一分钟。
例如:如果$seconds_diff
的值为13
[秒]:
$duration_in_minutes = round($seconds_diff / 60, 2);
$duration_in_milliseconds = $seconds_diff * 1000;
如果您的目标是使用毫秒,请使用microtime()
而不是time()
:
http://php.net/manual/de/function.microtime.php
推荐
只需使用microtime()
测量时间,然后直接将结果存储在数据库中,而无需四舍五入,除法或格式化。然后,在必须输出时进行格式化。这将为您提供更精确的结果和更多的自由。
$start_time = microtime();
…
$end_time = microtime();
$duration = $end_time - $start_time; // duration in milliseconds --> save to database
输出时,例如:
$duration = get_duration_from_database(); // pseudo function
printf('%.2f minutes', $duration / 1000 / 60);
答案 1 :(得分:1)
time()
函数以秒为单位返回当前的Unix时间戳 。无需将其除以1000。由于MySQL需要整数,因此必须四舍五入到小数点后0位:
$seconds_diff = abs($end_time_unix - $start_time_unix);
$duration = round($seconds_diff / 60, 0);