Как доработать код, для вывода русских вариантов месяцев?

186
30 июля 2018, 12:50

Надо изменить так, чтоб месяц был на русском языке, как это можно сделать?

<?php
  $monthOptions = '<option value="0" id="month_option">Month:</option>';
  $dayOptions = '<option value="0" id="day_option">Day:</option>';
  $yearOptions = '<option value="0" id="year_option">Year:</option>';
  for($month=1; $month<=12; $month++)
  {
     $monthName = date("M", mktime(0, 0, 0, $month));
     $monthOptions .= "<option value=\"{$month}\">{$monthName}</option>\n";
  }
  for($day=1; $day<=31; $day++)
  {
     $dayOptions .= "<option value=\"{$day}\">{$day}</option>\n";
  }
  for($year=2012; $year>=1890; $year--)
  {
     $yearOptions .= "<option value=\"{$year}\">{$year}</option>\n";
  }
  ?>
  ..............................
  <script type="text/javascript">
  function updateDays()
  {
     //Create variables needed
     var monthSel = document.getElementById('month');
     var daySel   = document.getElementById('day');
     var yearSel  = document.getElementById('year');
     var monthVal = monthSel.value;
     var yearVal  = yearSel.value;
     //Determine the number of days in the month/year
     var daysInMonth = 31;
     if (monthVal==2)
     {
         daysInMonth = (yearVal%4==0 && (yearVal%100!=0 || yearVal%400==0)) ? 29 : 28;
     }
     else if (monthVal==4 || monthVal==6 || monthVal==9 || monthVal==11)
     {
         daysInMonth = 30;
     }
     //Add/remove options from days select list as needed
     if(daySel.options.length > daysInMonth)
     {   //Remove excess days, if needed
         daySel.options.length = daysInMonth;
     }
     while (daySel.options.length != daysInMonth)
     {   //Add additional days, if needed
         daySel.options[daySel.length] = new Option(daySel.length+1, daySel.length+1, false);
     }
     return;
  }
  </script>
  <P>Date of birth:<br>
  <select name="day" id="day">
  <?php echo $dayOptions; ?>
  </select>
  <select name="month" id="month" onchange="updateDays();">
  <?php echo $monthOptions; ?>
  </select>
  <select name="year" id="year" onchange="updateDays();">
  <?php echo $yearOptions; ?>
  </select>
Answer 1

Нужно сначала сменить локальные установки системы, как это сделать описано здесь : https://vps.ua/wiki/beginners/setting-russian-locale-linux/

Затем в скрипт добавить код

setlocale(LC_ALL, 'ru_RU', 'ru_RU.UTF-8', 'ru', 'russian');
echo strftime("%B %d, %Y", time());

Answer 2

Самым быстрым и простым думаю будет поменять цикл

for($month=1; $month<=12; $month++) {
    $monthName = date("M", mktime(0, 0, 0, $month));
    $monthOptions .= "<option value=\"{$month}\">{$monthName}</option>\n";
}

На

foreach(['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'] AS $month=>$monthName)
    $monthOptions .= "<option value=\"{$month+1}\">$monthName</option>\n";

Я точно не помню работают ли операции в фигурках

READ ALSO
Сравнение времени php [дубликат]

Сравнение времени php [дубликат]

На данный вопрос уже ответили:

167
PHP | Аргументы функции переменной длинны

PHP | Аргументы функции переменной длинны

Как правильно объявить функцию с одним параметром, принимающую массив одинакового типа элементов?

169
преобразование и отображение char в с++

преобразование и отображение char в с++

есть проблема, ввожу русские буквы, например "у", по идее оно должно отображать в формате char "у" , а в формате int номер по таблице ASCII "227", но оно...

155