我一直在使用PHP中的checkdate函数。您可以看到我在http://codepad.org/JY4hG7jo使用的代码随意将代码分叉到您认为合适的位置。
基本上,如果我在08年09月检查一个月份前导零,我收到无效的日期回复。但是,当我通过循环运行它来检查所有月份;它会返回这几个月的有效回复。
主要问题不是循环产生不同结果的原因,更多的原因是日期被归类为无效。循环可能是我的错误。
感谢任何见解。
答案 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 ) ) { ... }