2012-02-20 3 views
3

На данный момент я пишу календарь. Согласно выбранному мотту ($monthnum), я сохраняю в базе данных сокращенное название месяца ($monthabbr). Для этого я использую конструкцию switch-case. Он работает на все месяцы, кроме 08 августа и 09 сентября. Поскольку я использовал один и тот же код в течение всех месяцев, я не знаю, почему он не работает. Я близок к краю, чтобы начать все заново, но перед этим мне лучше спросить, видите ли вы ошибку.Корпус выключателя - не все случаи работы

switch($monthnum) { 
      case 01: 
       $monthabbr = 'Jan'; 
       break; 
      case 02: 
       $monthabbr = 'Feb'; 
       break; 
      case 03: 
       $monthabbr = 'Mär'; 
       break; 
      case 04: 
       $monthabbr = 'Apr'; 
       break; 
      case 05: 
       $monthabbr = 'Mai'; 
       break; 
      case 06: 
       $monthabbr = 'Jun'; 
       break; 
      case 07: 
       $monthabbr = 'Jul'; 
       break; 
      case 08: 
       $monthabbr = 'Aug'; 
       break; 
      case 09: 
       $monthabbr = 'Sep'; 
       break; 
      case 10: 
       $monthabbr = 'Okt'; 
       break; 
      case 11: 
       $monthabbr = 'Nov'; 
       break; 
      case 12: 
       $monthabbr = 'Dez'; 
       break; 
} 

ответ

10

Изменение 01, 02, ..., 09 просто 1, 2, ..., 9 (капельное нули).


Начиная целое число буквального с 0 указывает на то, что оно должно быть истолковано как восьмеричное число (число в базе 8).

Для восьмеричных цифр цифры 8 и 9 являются незаконными.

Дальнейшее чтение:


(Кстати, вы можете рассмотреть используя массив или карту из целого числа в строку, а просто посмотреть строка, использующая что-то вроде monthAbbrs[$monthnum])

+0

Справа. И поэтому 08 и 09 недействительны, 10 равно 8 (dec) и 11 равно 9 (dec). – ckruse

+0

010 is 8 (dec) и 011 равно 9 (dec), 10 равно 10 (dec) и 11 равно 11 (dec) –

+0

Это решило проблему, спасибо! В начале я не был знаком с 0. – Sven

0

я не знаю, что цель, но лучший способ, чтобы разобрать ваш день

$mysqldate = date('Y-m-d H:i:s', $phpdate); 
$phpdate = strtotime($mysqldate); 

см here

, а затем отформатировать его так, как вам нравится:

// Prints something like: Monday 8th of August 2005 03:12:46 PM 
echo date('l jS \of F Y h:i:s A'); 

см here

+0

Действительно, вы можете сделать это так. Но для моей цели вы можете выбрать любую дату, используя раскрывающееся меню. – Sven

1

Вы можете избежать этой проблемы, используя котировки

switch($date){ 
    case "01": $month = "January"; break; 
    case "02": $month = "February"; break; 
    case "03": $month = "March"; break; 
    case "04": $month = "April"; break; 
    case "05": $month = "May"; break; 
    case "06": $month = "June"; break; 
    case "07": $month = "July"; break; 
    case "08": $month = "August"; break; 
    case "09": $month = "September"; break; 
    case "10": $month = "October"; break; 
    case "11": $month = "November"; break; 
    case "12": $month = "December"; break; 
}