У меня есть проблема, которую я не могу решить в течение двух дней.Я хочу сравнить два значения, представляющие год.Сначала строка, представленная пользователем - содержит только 4 цифры.Второй - строка из функции date('Y')
, также 4 цифры.Я хочу проверить, один год я терю, чем другой.Но результат сравнения равен true, если $ string содержит больше символов, чем результат функции date.Даже если я преобразую обе строки в целое число.Я также пробовал преобразование с использованием функции 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;
}