Unix中以分钟为单位的时差给出了意外结果

时间:2018-09-27 14:13:05

标签: php datetime

我有以下简单的测试代码:

$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。即使几分钟之内,我怎么能得到分钟?我上面的代码有什么问题??

2 个答案:

答案 0 :(得分:2)

首先int无法存储分数,因此您可能想使用floatdouble来代替。

但是为什么要除以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);