PHP mktime基于分钟计算得出不同的结果
以下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函数,但结果完全
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