检查结果不一致

时间:2009-08-17 16:37:08

标签: php

我一直在使用PHP中的checkdate函数。您可以看到我在http://codepad.org/JY4hG7jo使用的代码随意将代码分叉到您认为合适的位置。

基本上,如果我在08年09月检查一个月份前导零,我收到无效的日期回复。但是,当我通过循环运行它来检查所有月份;它会返回这几个月的有效回复。

主要问题不是循环产生不同结果的原因,更多的原因是日期被归类为无效。循环可能是我的错误。

感谢任何见解。

3 个答案:

答案 0 :(得分:1)

var_dump(checkdate(08, 1, 2007));
var_dump(checkdate(08, 01, 2007));
var_dump(checkdate(09, 1, 2007));
var_dump(checkdate(09, 01, 2007));

由于前导0,尝试'09'或只是9,这些值被视为八进制。应该可以工作。

答案 1 :(得分:0)

如果要使用前导零,请引用参数值。

  

$ date-> setDate(“2008”,“08”,“01”);

答案 2 :(得分:0)

正如其他人所指出的,你需要提供你的参数作为字符串(引号),而不是八进制数。你无法将它们转换为任何其他类型,因为它们已经是整数 - 编译器本身将它们解释为八进制。具体来说,它是尝试将它们解释为八进制,失败(因为在八进制中没有这样的数字,如8或9),而是用0填充变量。

顺便说一句,is_numeric在测试整数时是一个很差的函数选择,因为它允许任何类型的数值,包括'-0.5e5'这样的东西,这对你来说显然没用。最可靠的检查是ctype_digit,但请记住,必须被赋予字符串,因此您必须执行if( ctype_digit( (string)$var ) ) { ... }