Месяц февраль всегда отсутствует в Selectbox - PullRequest
0 голосов
/ 30 ноября 2011

вот мой пример кода для отображения поля выбора.Но месяц февраля всегда отсутствует в списке параметров.

, будучи новичком в PHP, также подскажет, как мне улучшить этот код.

$birth_month = strtotime("-{$age} Years");
$birthday = strftime("%m.%Y", $birthday_timestamp);

for ($month_itr = 1; $month_itr <= $bis; month_itr++) {
   $option_value = strftime("%m.%Y", $birth_month );
   $option_text = strftime("%b. %y", $birth_month );
   $selected = ($birthday == $option_value ? 'selected="selected"' : '');
   echo "<option value='{$option_value}' {$selected}>{$option_text}</option>\n";
   $birth_month = strtotime("+1 Month", $birth_month);
}

Ответы [ 2 ]

5 голосов
/ 30 ноября 2011
$birth_month = strtotime("-{$age} Years");

Эта строка рассчитывает дату относительно сегодняшнего дня. Поскольку сегодня 30-е число, дата будет 30-го числа соответствующего месяца. Учитывая, что вы прокручиваете месяцы, используя «+1 месяц» с этой даты, вы всегда будете смотреть на 30 число каждого месяца. Поскольку 30-го февраля не существует, PHP вычисляет это как 2-е марта (то есть через 2 дня после 28-го февраля). Если вы используете что-то вроде

$birth_month = strtotime("-{$age} Years");
$birth_month = mktime( 0, 0, 0, date( 'm', $birth_month ), 1, date( 'Y', $birth_month ) );

Ты должен быть в порядке.

0 голосов
/ 30 ноября 2011

Проблема в том, что вы запускаете этот код сейчас, а в феврале нет 30 дней (что является сегодняшним днем). Если бы мы собирались запустить его завтра, у вас были бы только месяцы с 31 днем. Неисправная строка:

$birth_month = strtotime("-{$age} Years");

Который будет использовать текущую временную метку, если не указано иное, и вычитать $age года, но остальная часть даты не изменится, поэтому вы получите '2010-11-30', если $age равно 1 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...