В общем хотел создать скрипт, выводящий все возможные даты начиная с 1970 года по 2012 год, причем в слитном варианте написания, учитывающий возможность указать год как двумя цифрами так и четырьмя, и учитывающий возможность написать как на первом месте день, так и месяц. с виду ничего сложного, код на мой взгляд тоже верен, но вот в браузере выводится совсем не то что ожидаю ((( Помогите найти подводный камень. PHP: <?php for ($i=1;$i<=31;$i++) { // дни for ($j=1;$j<=12;$j++) { // месяцы for ($k=70;$k<=99;$k++) { // годы $i0=$i; // сохраняем оригинальные значения $j0=$j; // переменных i и j if ($i=1) { $i="01"; } if ($i=2) { $i="02"; } if ($i=3) { $i="03"; } if ($i=4) { $i="04"; } // конвертируем их значения if ($i=5) { $i="05"; } // в двухзначную форму if ($i=6) { $i="06"; } if ($i=7) { $i="07"; } if ($i=8) { $i="08"; } if ($i=9) { $i="09"; } if ($j=1) { $j="01"; } if ($j=2) { $j="02"; } if ($j=3) { $j="03"; } if ($j=4) { $j="04"; } if ($j=5) { $j="05"; } if ($j=6) { $j="06"; } if ($j=7) { $j="07"; } if ($j=8) { $j="08"; } if ($j=9) { $j="09"; } echo("$i$j$k<br>"); // выводим дату: число-месяц-год (год двузначный с 70 по 99) $i=$i0; // востанавливаем оригинальные $j=$j0; // значения переменных i и j }}} for ($i=1;$i<=12;$i++) { for ($j=13;$j<=31;$j++) { // начинаем с 13 чтобы не повторяться в датах for ($k=70;$k<=99;$k++) { $i0=$i; $j0=$j; if ($i=1) { $i="01"; } if ($i=2) { $i="02"; } if ($i=3) { $i="03"; } if ($i=4) { $i="04"; } if ($i=5) { $i="05"; } if ($i=6) { $i="06"; } if ($i=7) { $i="07"; } if ($i=8) { $i="08"; } if ($i=9) { $i="09"; } if ($j=1) { $j="01"; } if ($j=2) { $j="02"; } if ($j=3) { $j="03"; } if ($j=4) { $j="04"; } if ($j=5) { $j="05"; } if ($j=6) { $j="06"; } if ($j=7) { $j="07"; } if ($j=8) { $j="08"; } if ($j=9) { $j="09"; } echo("$i$j$k<br>"); // дата: месяц-число-год (год двузначный с 70 по 99) $i=$i0; $j=$j0; }}} for ($i=1;$i<=31;$i++) { for ($j=1;$j<=12;$j++) { for ($k=0;$k<=12;$k++) { $i0=$i; $j0=$j; $k0=$k; if ($i=1) { $i="01"; } if ($i=2) { $i="02"; } if ($i=3) { $i="03"; } if ($i=4) { $i="04"; } if ($i=5) { $i="05"; } if ($i=6) { $i="06"; } if ($i=7) { $i="07"; } if ($i=8) { $i="08"; } if ($i=9) { $i="09"; } if ($j=1) { $j="01"; } if ($j=2) { $j="02"; } if ($j=3) { $j="03"; } if ($j=4) { $j="04"; } if ($j=5) { $j="05"; } if ($j=6) { $j="06"; } if ($j=7) { $j="07"; } if ($j=8) { $j="08"; } if ($j=9) { $j="09"; } if ($k=0) { $k="00"; } echo("$i$j$k<br>"); // дата: число-месяц-год (год двузначный с 00 по 12) $i=$i0; $j=$j0; $k=$k0; }}} for ($i=1;$i<=12;$i++) { for ($j=13;$j<=31;$j++) { for ($k=0;$k<=12;$k++) { $i0=$i; $j0=$j; $k0=$k; if ($i=1) { $i="01"; } if ($i=2) { $i="02"; } if ($i=3) { $i="03"; } if ($i=4) { $i="04"; } if ($i=5) { $i="05"; } if ($i=6) { $i="06"; } if ($i=7) { $i="07"; } if ($i=8) { $i="08"; } if ($i=9) { $i="09"; } if ($j=1) { $j="01"; } if ($j=2) { $j="02"; } if ($j=3) { $j="03"; } if ($j=4) { $j="04"; } if ($j=5) { $j="05"; } if ($j=6) { $j="06"; } if ($j=7) { $j="07"; } if ($j=8) { $j="08"; } if ($j=9) { $j="09"; } if ($k=0) { $k="00"; } echo("$i$j$k<br>"); // дата: месяц-число-год (год двузначный с 00 по 12) $i=$i0; $j=$j0; $k=$k0; }}} for ($i=1;$i<=31;$i++) { for ($j=1;$j<=12;$j++) { for ($k=1970;$k<=2012;$k++) { $i0=$i; $j0=$j; if ($i=1) { $i="01"; } if ($i=2) { $i="02"; } if ($i=3) { $i="03"; } if ($i=4) { $i="04"; } if ($i=5) { $i="05"; } if ($i=6) { $i="06"; } if ($i=7) { $i="07"; } if ($i=8) { $i="08"; } if ($i=9) { $i="09"; } if ($j=1) { $j="01"; } if ($j=2) { $j="02"; } if ($j=3) { $j="03"; } if ($j=4) { $j="04"; } if ($j=5) { $j="05"; } if ($j=6) { $j="06"; } if ($j=7) { $j="07"; } if ($j=8) { $j="08"; } if ($j=9) { $j="09"; } echo("$i$j$k<br>"); // дата: число-месяц-год (год четырехзначный с 1970 по 2012) $i=$i0; $j=$j0; }}} for ($i=1;$i<=12;$i++) { for ($j=13;$j<=31;$j++) { for ($k=1970;$k<=2012;$k++) { $i0=$i; $j0=$j; if ($i=1) { $i="01"; } if ($i=2) { $i="02"; } if ($i=3) { $i="03"; } if ($i=4) { $i="04"; } if ($i=5) { $i="05"; } if ($i=6) { $i="06"; } if ($i=7) { $i="07"; } if ($i=8) { $i="08"; } if ($i=9) { $i="09"; } if ($j=1) { $j="01"; } if ($j=2) { $j="02"; } if ($j=3) { $j="03"; } if ($j=4) { $j="04"; } if ($j=5) { $j="05"; } if ($j=6) { $j="06"; } if ($j=7) { $j="07"; } if ($j=8) { $j="08"; } if ($j=9) { $j="09"; } echo("$i$j$k<br>"); // дата: месяц-число-год (год четырехзначный с 1970 по 2012) $i=$i0; $j=$j0; }}} ?> Заранее спасибо.
http://www.php.ru/manual/language.types.array.html читай а вообще советую http://jqueryui.com/demos/datepicker/#buttonbar пощупать, глядишь, пригодится, также советую как источник неплохив мануалов http://tutorialzine.com/ http://net.tutsplus.com/ ........ В общем советую jQuery ui пощупать, оч прикольные обработчики времени
zhen Советую подумать и выложить более рациональный вариант. Иначе Вам придется менять ник, чтобы не нашли этот позор Ваши знакомые и коллеги. P.S. Остальным пока не рекомендуйте НИЧЕГО.
Kreker Советую подумать и выложить более рациональный вариант. Я бы посоветовал начать с постановки задачи, ибо я не только не понял почему он такой дикий, но вобще что он делает
Код самый простой, написан копипастом за 2 мин, впринципе он работает после небольших исправлений а мне это и надо было. я конечно понимаю что он очень не оптимальный, но задачей было просто получить список дат один раз и все, так сказать чтоб вручную их не писать. И пхп я знаю на очень поверхностном уровне, никому ничего не советую, сайтов не делаю, использую только в личных целях ) аватарку поменяю чуть пожже.
Рабочая версия кода, рад выслушать критику про оптимизацию ) PHP: <?php for ($i=1;$i<=31;$i++) { // дни for ($j=1;$j<=12;$j++) { // месяцы for ($k=70;$k<=99;$k++) { // годы $i0=$i; // сохраняем оригинальные значения $j0=$j; // переменных i и j if ($i==1) { $i="01"; } // конвертируем их значения if ($i==2) { $i="02"; } // в двухзначную форму if ($i==3) { $i="03"; } if ($i==4) { $i="04"; } if ($i==5) { $i="05"; } if ($i==6) { $i="06"; } if ($i==7) { $i="07"; } if ($i==8) { $i="08"; } if ($i==9) { $i="09"; } if ($j==1) { $j="01"; } if ($j==2) { $j="02"; } if ($j==3) { $j="03"; } if ($j==4) { $j="04"; } if ($j==5) { $j="05"; } if ($j==6) { $j="06"; } if ($j==7) { $j="07"; } if ($j==8) { $j="08"; } if ($j==9) { $j="09"; } echo("$i$j$k<br>"); // выводим дату: число-месяц-год (год двузначный с 70 по 99) $i=$i0; // востанавливаем оригинальные $j=$j0; // значения переменных i и j }}} for ($i=1;$i<=12;$i++) { for ($j=13;$j<=31;$j++) { // начинаем с 13 чтобы не повторяться в датах for ($k=70;$k<=99;$k++) { $i0=$i; if ($i==1) { $i="01"; } if ($i==2) { $i="02"; } if ($i==3) { $i="03"; } if ($i==4) { $i="04"; } if ($i==5) { $i="05"; } if ($i==6) { $i="06"; } if ($i==7) { $i="07"; } if ($i==8) { $i="08"; } if ($i==9) { $i="09"; } echo("$i$j$k<br>"); // дата: месяц-число-год (год двузначный с 70 по 99) $i=$i0; }}} for ($i=1;$i<=31;$i++) { for ($j=1;$j<=12;$j++) { for ($k=0;$k<=12;$k++) { $i0=$i; $j0=$j; $k0=$k; if ($i==1) { $i="01"; } if ($i==2) { $i="02"; } if ($i==3) { $i="03"; } if ($i==4) { $i="04"; } if ($i==5) { $i="05"; } if ($i==6) { $i="06"; } if ($i==7) { $i="07"; } if ($i==8) { $i="08"; } if ($i==9) { $i="09"; } if ($j==1) { $j="01"; } if ($j==2) { $j="02"; } if ($j==3) { $j="03"; } if ($j==4) { $j="04"; } if ($j==5) { $j="05"; } if ($j==6) { $j="06"; } if ($j==7) { $j="07"; } if ($j==8) { $j="08"; } if ($j==9) { $j="09"; } if ($k==0) { $k="00"; } if ($k==1) { $k="01"; } if ($k==2) { $k="02"; } if ($k==3) { $k="03"; } if ($k==4) { $k="04"; } if ($k==5) { $k="05"; } if ($k==6) { $k="06"; } if ($k==7) { $k="07"; } if ($k==8) { $k="08"; } if ($k==9) { $k="09"; } echo("$i$j$k<br>"); // дата: число-месяц-год (год двузначный с 00 по 12) $i=$i0; $j=$j0; $k=$k0; }}} for ($i=1;$i<=12;$i++) { for ($j=13;$j<=31;$j++) { for ($k=0;$k<=12;$k++) { $i0=$i; $k0=$k; if ($i==1) { $i="01"; } if ($i==2) { $i="02"; } if ($i==3) { $i="03"; } if ($i==4) { $i="04"; } if ($i==5) { $i="05"; } if ($i==6) { $i="06"; } if ($i==7) { $i="07"; } if ($i==8) { $i="08"; } if ($i==9) { $i="09"; } if ($k==0) { $k="00"; } if ($k==1) { $k="01"; } if ($k==2) { $k="02"; } if ($k==3) { $k="03"; } if ($k==4) { $k="04"; } if ($k==5) { $k="05"; } if ($k==6) { $k="06"; } if ($k==7) { $k="07"; } if ($k==8) { $k="08"; } if ($k==9) { $k="09"; } echo("$i$j$k<br>"); // дата: месяц-число-год (год двузначный с 00 по 12) $i=$i0; $k=$k0; }}} for ($i=1;$i<=31;$i++) { for ($j=1;$j<=12;$j++) { for ($k=1970;$k<=2012;$k++) { $i0=$i; $j0=$j; if ($i==1) { $i="01"; } if ($i==2) { $i="02"; } if ($i==3) { $i="03"; } if ($i==4) { $i="04"; } if ($i==5) { $i="05"; } if ($i==6) { $i="06"; } if ($i==7) { $i="07"; } if ($i==8) { $i="08"; } if ($i==9) { $i="09"; } if ($j==1) { $j="01"; } if ($j==2) { $j="02"; } if ($j==3) { $j="03"; } if ($j==4) { $j="04"; } if ($j==5) { $j="05"; } if ($j==6) { $j="06"; } if ($j==7) { $j="07"; } if ($j==8) { $j="08"; } if ($j==9) { $j="09"; } echo("$i$j$k<br>"); // дата: число-месяц-год (год четырехзначный с 1970 по 2012) $i=$i0; $j=$j0; }}} for ($i=1;$i<=12;$i++) { for ($j=13;$j<=31;$j++) { for ($k=1970;$k<=2012;$k++) { $i0=$i; if ($i==1) { $i="01"; } if ($i==2) { $i="02"; } if ($i==3) { $i="03"; } if ($i==4) { $i="04"; } if ($i==5) { $i="05"; } if ($i==6) { $i="06"; } if ($i==7) { $i="07"; } if ($i==8) { $i="08"; } if ($i==9) { $i="09"; } echo("$i$j$k<br>"); // дата: месяц-число-год (год четырехзначный с 1970 по 2012) $i=$i0; }}} ?>
Не шути так... Если услышишь реальную критику, твоё ЧСВ упадёт так сильно что ты повесишься... Да, и... http://www.php.net/manual/en/function.sprintf.php
не ну я сам понимаю что проверку if ($i==1) { $i="01"; } нужно вынести за циклы for ($j=хх;$j<=хх;$j++) и for ($k=хх;$k<=хх;$k++) ну а больше я косяков не вижу. разве что вместо кучи if использовать elseif. Про функции я ничего не знаю поэтому приходится писать код повторно, но это влияет только на размер файла а не на быстродействие, т.к. какая разница процессору откуда брать код )) Код (Text): p.s. нигде не нашел в правилах форума что аватаркой может быть только личная фото.
Однако это факт (может в правила и забыли вписать, но все договорились что будет именно так) Убрать её нужно (для начала) всё это делается проще и быстрее (а если отойти от РНР и мыслить более "масштабно" то можно нейтрализовать и остальное)
мне не нужно форматировать дату, мне нужно было вывести все даты определенного периода времени в определенной форме. Считаю что мой способ в плане алгоритма самый простой.
незнание синтаксиса одного из множества языков программирования не говорит не о чем, кроме того , что я не знаю php.
можно его немного усложнить PHP: <? $start = mktime(0,0,0,1,1,2011); $end = mktime (0,0,0,31,12,2011); for ($i=$start; $i<= $end; $i += (60*60*24)) { echo date('d-m-y', $i); echo '<br>'; }
Дело не в синтаксисе, а в логике. Что, так нельзя было? if (!isset($j[1])) $j = '0'.$j; Или так: if (str_length($j)) $j = '0'.$j; Вместо кучи условий. Или со знанием php: $j = sprintf('%02d', $j); Или вариант, который предложил [vs]