Получить дату, взорваться, использовать данные, чтобы выбрать опции в <select> - PullRequest
2 голосов
/ 03 сентября 2011

У меня установлены три переменные: $date_legible (в формате F jS, Y, т.е. 1 января 2011 г.), $date_timestamp (не требует пояснений) и $date_normal (в формате YYYY-MM-DD)

У меня есть три поля выбора:

    <select name="date_mo">
        <option value="01">January</option>
        <option value="02">February</option>
        <option value="03">March</option>
        <option value="04">April</option>
        <option value="05">May</option>
        <option value="06">June</option>
        <option value="07">July</option>
        <option value="08">August</option>
        <option value="09">September</option>
        <option value="10">October</option>
        <option value="11">November</option>
        <option value="12">December</option>
    </select>
    <select name="date_dy">
        <option value="01">1</option>
        <option value="02">2</option>
        <option value="03">3</option>
        <option value="04">4</option>
        <option value="05">5</option>
        <option value="06">6</option>
        <option value="07">7</option>
        <option value="08">8</option>
        <option value="09">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
        <option value="13">13</option>
        <option value="14">14</option>
        <option value="15">15</option>
        <option value="16">16</option>
        <option value="17">17</option>
        <option value="18">18</option>
        <option value="19">19</option>
        <option value="20">20</option>
        <option value="21">21</option>
        <option value="22">22</option>
        <option value="23">23</option>
        <option value="24">24</option>
        <option value="25">25</option>
        <option value="26">26</option>
        <option value="27">27</option>
        <option value="28">28</option>
        <option value="29">29</option>
        <option value="30">30</option>
        <option value="31">31</option>
    </select>
    <select name="date_yr">
        <?php for($year=$curryear;$year<$curryear+51;$year++){ ?>
            <option value="<?php echo $year; ?>"><?php echo $year; ?></option>
        <?php } ?>
    </select>

Я знаю, что хочу преобразовать метку времени, но в конечном итоге мне понадобится взорвать вывод для $month, $dayи $year.Проблема в том, что я не знаю, как проверить выбранные значения и автоматически выбрать правильный вариант.

Кто-нибудь может помочь?Спасибо!

ОБНОВЛЕНИЕ

Теперь у меня есть еще одна переменная, потому что пользователи отправляют данные из внешнего интерфейса, а Gravity Forms отправляет как YYYY-MM-DD.

Прежде чем углубиться в уже опубликованные решения (кстати, спасибо, ребята [и gals]), вот немного больше информации:

Я использую WordPress и у меня есть три пользовательских поля, как описановыше.Когда пользователь отправляет сообщение из внешнего интерфейса, единственным заполненным пользовательским полем является $date_normal.Это нормально, потому что сообщение должно быть модерировано (т.е. опубликовано) из бэкэнда.Что мне сейчас СЕЙЧАС нужно, чтобы загрузить YYYY-MM-DD для установки параметров select.Я не прошу вас, ребята, изменить ваши ответы, я уверен, что смогу это выяснить (хотя, если вы поможете с этой новой проблемой, это будет с благодарностью).

Ответы [ 3 ]

4 голосов
/ 03 сентября 2011

Если я правильно понимаю ваш вопрос, у вас есть временная метка, и вам нужно использовать временную метку, чтобы выбрать соответствующие параметры выбора при отображении страницы.

Как предупреждение - это позволит выбрать недействительные даты, например, 31 февраля (не существует). Возможно, вы захотите перерисовать год выпадающего списка, когда месяц изменяется с помощью JavaScript. Поскольку вы не указали какую-либо библиотеку javascript (и неясно, насколько важна вероятность неверной даты), я не рискну показывать код для этого, но это не будет ужасно сложно.

// using the current time for the sake of the example, your timestamp would take the place of this
$timestamp = time();

// determine the selected month, day, and year
$selected_month = date('n', $timestamp);
$selected_day = date('j', $timestamp);
$selected_year = date('Y', $timestamp);

// now, create the drop-down for months
$month_html = '<select name="date_mo">';
for ($x = 1; $x < 13; $x++) {
    $month_html .= '<option value='.$x.($selected_month == $x ? ' selected=true' : '' ).'>'.date("F", mktime(0, 0, 0, $x, 1, $selected_year)).'</option>';
}
$month_html .= '</select>';
// output
print $month_html;


// create the day drop-down
$day_html = '<select name="date_day">';
for ($x = 1; $x < 32; $x++) {
    $day_html .= '<option value='.$x.($selected_day == $x ? ' selected=true' : '' ).'>'.$x.'</option>';
}   
$day_html .= '</select>';
// output
print $day_html;


// create the year drop-down
$year_html = '<select name="date_year">';
$start_year = date('Y', time());
$max_year = $start_year + 51;
for ($x = $start_year; $x < $max_year; $x++) {
    $year_html .= '<option value='.$x.($selected_year == $x ? ' selected=true' : '' ).'>'.$x.'</option>';
}   
$year_html .= '</select>';
// output
print $year_html;

Выход:

Sample of script output

EDIT Если ваши исходные данные будут в формате YYYY-MM-DD. Чтобы перевести это в метку времени и, таким образом, работать с примером кода, который я опубликовал, нужно вызвать strtotime для этого отформатированного значения даты. Таким образом, единственная строка в приведенном выше коде, которую необходимо изменить, это $timestamp = strtotime($the_formatted_date);

2 голосов
/ 03 сентября 2011
<?php
    // $months = array(1 => 'January', 2 => 'February', ... etc
?>
<select name="date_mo">
<? for ($i = 1, $current = (int) date('n'); $i <= 12; $i++) { ?>
    <option value="<?=$i;?>"<?=($current === $i ? ' selected="selected"' : NULL);?>><?=$months[$i];?></option>
<? } ?>
</select>
<select name="date_dy">
<? for ($i = 1, $current = (int) date('j'); $i <= 31; $i++) { ?>
    <option value="<?=$i;?>"<?=($current === $i ? ' selected="selected"' : NULL);?>><?=$i;?></option>
<? } ?>
<select name="date_yr">
<? for ($i = $current = (int) date('Y'), $until = $i + 50; $i <= $until; $i++) { ?>
    <option value="<?=$i;?>"<?=($current === $i ? ' selected="selected"' : NULL);?>><?=$i;?></option>
<? } ?>
</select>
1 голос
/ 03 сентября 2011

Я бы лично преобразовал 3 поля в более удобный для пользователя селектор даты (например, с помощью jQuery UI ), но чтобы при открытии страницы была выбрана правильная опция, необходимо добавитьотметьте каждую опцию.

Пример для года:

  <?php
      $selected_year = date("Y", $date_timestamp);      // get the selected year
      for($year=$curryear;$year<$curryear+51;$year++)
      {
  ?>
        <option value="<?php echo $year; ?>" <?php echo ($selected_year == $year) ? 'selected' : ''; ?>><?php echo $year; ?></option>
  <?php
      }
  ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...