Функция даты PHP для текущего года не работает правильно?

#php #date

#php #Дата

Вопрос:

Хорошо, итак, я пытался сделать так, чтобы выпадающее меню формы автоматически выбирало текущую дату без особого кодирования javascript, поэтому я получил приведенный ниже код (он не выбирает автоматически, но он включает текущую дату в качестве первых параметров). Год не отображался первым, как предполагалось. Я сделал то же самое для дня и месяца, и эти 2 работали отлично, но когда у меня был тот же код, за исключением дней / месяцев вместо лет (mday и mon внутри скобок), выбор первого года не отображался. Я предполагаю, что проблема заключается в части внутри двух экземпляров [$ t[‘year’]] . Остальная часть кода работает нормально, но я просто включил его на случай, если я что-то пропустил (я также попытался заменить все годы на последние соответствующие им последние 2 цифры, но результат тот же).

 <?php
$t = getdate(time()); 
$year = array(1 =>'2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026', '2027', '2028', '2029', '2030'); 

echo 'amp;nbsp Year <select name="year" >'; 
echo '<option value="" . $t['year'] . "">' . $year[$t['year']] . '</option>'; 
foreach( $year as $key => $value ) { 
    echo "<option value = "$key">$value</option>"; 
} 
echo '</select>'; ?>
  

Ответ №1:

Используйте date('Y') .

http://php.net/manual/en/function.date.php

 <?php
$t = getdate(time()); 
$year = array('2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026', '2027', '2028', '2029', '2030'); 

echo 'amp;nbsp Year <select name="year" >'."n"; 
echo '<option value="' . array_search(date('Y'),$year) . '">' . date('Y') . '</option>'."n"; 
foreach( $year as $key => $value ) { 
    echo "<option value = "$key">$value</option>n"; 
} 
echo '</select>'."n";

?>
  

http://codepad.org/7h2MnxzC

При этом также будет выбрано только одно значение в select , поэтому вам не нужно два:

 <?php
$t = getdate(time()); 
$year = array('2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026', '2027', '2028', '2029', '2030'); 
$c_year = date('Y');

echo 'amp;nbsp Year <select name="year" >'."n"; 
foreach( $year as $key => $value ) { 
    echo "<option".($c_year == $value?' selected="true"':'')." value = "$key">$value</option>n"; 
} 
echo '</select>'."n";

?>
  

http://codepad.org/uGx6zoyn

Комментарии:

1. Я уже прочитал обо всем этом. Это не обязательно работает в моей ситуации. Я пытаюсь получить эквивалент года для ‘mday’ и ‘mon’, который должен быть ‘year’…

2. Смотрите мою правку. Я не уверен, почему вы делаете это именно так, но это сработает.

3. Потратив много времени на проверку того, что хотел OP, я, к сожалению, 1 это. Я устал от необходимости постоянно отсылать людей к php.net руководство пользователя! Редактировать: О, хорошо, было что добавить!

4. хм, извините, я все еще новичок в этом. Не знал, как использовать array_search. Спасибо 🙂

5. @user987026 — Я добавил второй вариант, который, вероятно, лучше.

Ответ №2:

 $years = range(2000, 2030);
$cur_year = date('Y');

echo '<select name="year">';
foreach($years as $year)
    if($year == $cur_year)
        echo "<option selected>$year</option>"; 
    else
        echo "<option>$year</option>";
echo '</select>';