PHP mktime基于分钟计算得出不同的结果

PHP mktime基于分钟计算得出不同的结果,php,Php,以下mktime对最终回波产生不同的结果 php > echo mktime(7, 36, 0); 1406842560 php > echo mktime(7, 60 * 0.6, 0); 1406842560 php > echo mktime(7, 60 * ( 7.6 - 7.0 ), 0); 1406842500 对于每个mktime,这个微小的参数是36,我尝试了使用(int)和intval进行强制转换,还使用了DateTime对象的setTime函数,但结果完全

以下mktime对最终回波产生不同的结果

php > echo mktime(7, 36, 0);
1406842560
php > echo mktime(7, 60 * 0.6, 0);
1406842560
php > echo mktime(7, 60 * ( 7.6 - 7.0 ), 0);
1406842500
对于每个mktime,这个微小的参数是36,我尝试了使用(int)和intval进行强制转换,还使用了DateTime对象的setTime函数,但结果完全相同

这只是一个例子,我需要最终的mktime版本与前两个版本一样工作,正如预期的那样,因为通过变量而不是上面例子中的数字进行计算


有什么想法吗?

关于为什么会出现这种情况,我没有很好的解释-我感觉这与您传递的值是一个浮点值,而不是一个整数有关,因此在后台可能存在精度问题

通过在第二个参数周围添加round()函数,以下内容似乎可以正常工作:

echo mktime(7, round(60 * ( 7.6 - 7.0 )), 0);

返回1406842560。

有趣的是,
ceil
可以工作,但是
floor
不能

工作:

不要:

mktime(7, floor(60 * ( 7.6 - 7.0 )), 0); //1406810100
mktime(7, intval(60 * ( 7.6 - 7.0 )), 0); //1406810100
mktime(7, (int)(60 * ( 7.6 - 7.0 )), 0); //1406810100

有趣的是,将
60*(7.6-7.0)
转换为字符串会使函数返回1406842560;将(字符串)强制转换参数传递给需要整数的函数是令人困惑的。谢谢。我手头没有PHP实例,但我假设如果您删除
mktime()
它们都会打印出一个精确的36?非常好且完整的答案!我已经奖励了梅尔基奥,他来得更早,分数也少得多。非常感谢。
mktime(7, floor(60 * ( 7.6 - 7.0 )), 0); //1406810100
mktime(7, intval(60 * ( 7.6 - 7.0 )), 0); //1406810100
mktime(7, (int)(60 * ( 7.6 - 7.0 )), 0); //1406810100