для цикла для каждого месяца года - PullRequest
2 голосов
/ 11 августа 2011

Я пытаюсь написать цикл for в PHP, чтобы добавить к раскрывающемуся тегу HTML <select>, который позволяет людям выбрать месяц рождения.

Вот мой код, который не работает:

            <p>
            <label for="signup_birth_month">Birthday:</label>
            <select name="signup_birth_month" id="signup_birth_month">
            <option value="">Select Month</option>
            <?php

            for ($i = 1; $i <= 12; $i++)
            {
                $month_name = date('F', mktime(0, 0, 0, $i, 1, 2011));
                echo '<option value="'.$month_name.'"'.$month_name.'></option>';
            }

            ?>
            </select>
            </p>

Как написать цикл for, который возвращает имя каждого месяца в году?

Ответы [ 7 ]

10 голосов
/ 11 августа 2011

Вам нужно заключить ключ value в:

echo "<option value=\"" . $month_name . "\">" . $month_name . "</option>";

Кроме того, я бы предпочел что-то вроде этого:

$months = array("Jan", "Feb", "Mar", ..., "Dec");
foreach ($months as $month) {
    echo "<option value=\"" . $month . "\">" . $month . "</option>";
}

Кажется странным, что вы сделали бы все эти ненужные вызовы date и mktime, когда вы знаете , какими должны быть значения.

Эта версия массива имеет такое же количество строк, и кажется, что намерение намного яснее (по крайней мере, мне).

3 голосов
/ 18 мая 2014
for($iM =1;$iM<=12;$iM++){
echo date("M", strtotime("$iM/12/10"));}
1 голос
/ 29 июля 2014

Очень просто!

function getLocalMonthName($locale, $monthnum)
{
    setlocale (LC_ALL, $locale.".UTF-8");
    return ucfirst(strftime('%B', mktime(0, 0, 0, $monthnum, 1)));
}

print getLocalMonthName("pt_BR", 1); // returns Janeiro
1 голос
/ 11 августа 2011

Разве вы не видите, как название месяца печатается в поле выбора?

Я думаю, что это должно помочь:

echo "<option value=\"" . $month_name . "\">" . $month_name . "</option>";
0 голосов
/ 08 мая 2019

PHP-код для распечатки названия каждого месяца:

<?php 
date_default_timezone_set('America/New_York'); 
for($i=1; $i<=12; $i++){ 
    $month = date('F', mktime(0, 0, 0, $i, 10)); 
    echo $month . ","; 
    // It will print: January,February,.............December,
}
?> 
0 голосов
/ 14 марта 2017

Очень простое решение:

print '<option value="" disabled selected>Select month</option>';
for ( $i = 1; $i <= 12; $i ++ ) { 
    print '<option value="' . $i . '">' . date( 'F', strtotime( "$i/12/10" ) ) . '</option>'; 
}
0 голосов
/ 11 августа 2011

Я думаю, вам следует исправить часть HTML.

echo '<option value="'.$month_name.'">'.$month_name.'</option>';

Не забудьте установить часовой пояс по умолчанию до

date_default_timezone_set('Your/Timezone');

В противном случае вы получите E_WARNING для date () иmktime () (если вы установили error_reporting (E_ALL)).Посмотрите на http://www.php.net/manual/en/timezones.php для правильных часовых поясов.

В качестве альтернативы, вы также можете использовать что-то вроде

$i = 1;
$month = strtotime('2011-01-01');
while($i <= 12)
{
    $month_name = date('F', $month);
    echo '<option value="'. $month_name. '">'.$month_name.'</option>';
    $month = strtotime('+1 month', $month);
    $i++;
}

Но цикл for просто отлично.

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