首页 > 解决方案 > Unix 时差(以分钟为单位)给出了意想不到的结果

问题描述

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

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

标签: phpdatetime

解决方案


首先int不能存储分数,所以你可能想要使用floatordouble代替。

但是你为什么要除以1000. $seconds_diffseconds组成,因此除以60将给您一分钟的分数。

例如:如果$seconds_diff13[seconds] 的值:

$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);

推荐阅读