我有两天无法解决的问题。我想比较两个代表年份的值。首先是用户提交的字符串-仅包含4位数字。第二个是来自date('Y')
函数的字符串,也是4位数字。我想检查一下我是否比另一年更快乐。但是,如果$ string的字符多于date函数的结果,则比较结果为true。即使我将两个字符串都转换为整数。我也尝试使用intval
函数进行转换。在比较之前,我已经在两种情况下都检查了gettype()
的两个值,它们是同一类型。有趣的是,如果我将这段代码放到phpfiddle中,它就会像我想要的那样工作。
$string = '2020';
$isTooBig = $string > date('Y');
$isTooBig1 = (int)$string > (int)date('Y');
//In this case $isTooBig is boolean with 0 value;
完整代码:
function whatIsWrong( $type, $string ) {
$comma = '';
$json = '';
if ( $type == 'year' ) {
$yearOverLimit = $string > date('Y') && strlen($string) == 4; //problem is here
$fieldIsEmpty = strlen( $string ) == 0;
$charIsWrong = !preg_match( '/^\d{4}$/', $string ) && !strlen($string) == 0;
$json .= ' [';
if ( $fieldIsEmpty ) {
if ( $yearOverLimit || $charIsWrong ) {
$comma = ', ';
} else {
$comma = '';
}
$json .= '{"message": "Year can\'t be empty"}'.$comma;
}
if ( $yearOverLimit ) {
if ( $charIsWrong ) {
$comma = ', ';
} else {
$comma = '';
}
$json .= '{"message": "Year must be between 1870-'.date('Y').'"}'.$comma;
}
if ( $charIsWrong ) {
$json .= '{"message": "Year must be 4-digit"}';
}
$json .= ']';
}
return $json;
}
答案 0 :(得分:0)
@Werner说:“
因此,
$yearOverLimit
仅在$string > 2018 (curr yr)
和4位数字时为真。
我知道,应该,这是我的意图。但是它不在我的编辑器(vim)中,也不知道为什么。
如果年份是YYYY,则(int)$string > (int)date('Y')
(不包含strlen
)返回false
,如果YYYYY或更大,则返回true
。我真笨。也许是PHP版本的差异?