- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
function returnDate($stamp){
global $settings;
$day = strftime("%d",$stamp+($settings['timeoffset']*3600));
$month = strftime("%m",$stamp+($settings['timeoffset']*3600));
$year = strftime("%Y",$stamp+($settings['timeoffset']*3600));
switch ($month){
case 01 : $month = "01"; break;
case 02 : $month = "02"; break;
case 03 : $month = "03"; break;
case 04 : $month = "04"; break;
case 05 : $month = "05"; break;
case 06 : $month = "06"; break;
case 07 : $month = "07"; break;
case 08 : $month = "08"; break;
case 09 : $month = "09"; break;
case 10 : $month = "10"; break;
case 11 : $month = "11"; break;
case 12 : $month = "12"; break;
}
return "$day.$month.$year";
}
Взято из чешского шаблона под одну цмску. Автору, наверно, платят как Маяковскому - за каждую строчку :-)
09 != 9
09 - это в восмеричной системе счисления. А так как это не правильная запись, то 09 в PHP преобразуется в число 0
Во-вторых, Попробуйте сравнить 07 == "07" и 09 == "09", результаты будут разные
В-третьих, говнокод не в этом сравнении. Это так, в учебных целях
Во-первых, strftime возвращает не число, а строку. Это важно
> Во-вторых, Попробуйте сравнить 07 == "07" и 09 == "09", результаты будут разные
Читай не последний коммент, а всю ветку
P.S. Коммент #comment11606 мой
Это сейчас знание систем счисления сводится только к использованию функции base_convert, но не все смогут перевести из одной системы в другую используя листок и ручку
> Как раз таки важно. Функция возвращает строку, а сравнивается потом с числом.
> > Во-вторых, Попробуйте сравнить 07 == "07" и 09 == "09", результаты будут разные
Написанному под гостем. То что это ты первый обратил внимание на то что числа не в той системе я вижу.
В общем с учетом выясненного мой камент должен быть таким:
> Во-вторых, Попробуйте сравнить 07 == "07" и 09 == "09", результаты будут разные
При чем тут это? Сравни 07 == 7 и 09 == 9, результаты будут такие же разные. Потому что строка в правой части приводится к числу, т.к. в левой части число.
Если мы сравним "0.0" == "0E0", "0.0" == "0A0", 0.0 == "0A0", то результаты будут разные.
Если хотя бы один из аргументов число, то он сравнивает оба аргумента как числа. Затем он пытается привести обе строки в числа, если они корректно приводятся, сравнивает их как числа. Иначе он сравнивает аргументы как строки.
Отсюда вывод, что даже если мы сравниваем две строки, они необязательно будут сравнены как строки. Поэтому во избежании неожиданностей лучше всегда сравнивать строки с помощью strcmp, несмотря на то что использования обычных операторов сравнения и switch дозволяется. То же самое относится и к использованию функции sort без второго параметра, результаты могут быть непредсказуемыми.
Описанная выше особенность связанна с кривым унаследованием нетипизированости Perl.
Пожалуй, еще чудо-примерчик "9" == "000000900.000E-2"
Читайте всё, а не через строчку и включайте мозг, здесь уже все изложено
>>Во-первых, strftime возвращает не число, а строку. Это важно
>>Как раз таки важно. Функция возвращает строку, а сравнивается потом с числом.
Или
>>Нет, именно сравнение чисел
>>Т.е. тоже самое что и сравнить 09 и 9.