::: PHP.com.ua - учимся вместе. ::: ::: PHP.com.ua - учимся вместе. :::



 
   - Разработка CRM для туристического бизнес...
  - тестування по прив"язці до часу...
  - СРОЧНО! Требуется талантливый PHP програ...
  - Оплачу FLASH-сайт под ключ.
  - выборка одним запросом нескольких похожи...
  - функции верификации строк.
  - Помогите вытянуть скрипт отправки почты ...


Главная
Новости
Статьи
Шпаргалки
Файлы
О проекте
Форум
Футболки


FREEhost.com.ua - купил хостинг 10 у.е. на Begun в подарок.

iName.com.ua - регистрация доменных имен и хороший хостинг.

Библиотека программиста - нужный вам исходник или документация по необходимому для вас языку программирования.

Designclub - Клуб дизайнеров Украины.

Регистрация доменов
Хостинг

 HowtoForge.ORG.UA - Это первый Украинский ресурс развития open source программного обеспечения


Путь: Шпаргалки

Шпаргалки

Автор: - Crocodile
Дата публикации - 10.05.2005
Просмотров: - 4291

Немного подумаем или


Сразу же прошу прощения, но не выдержал и решил написать некий опус-лекцию на заданную тему.

[p]Предисловие[/p]

Данный материал является дополнением к теме Работа с датой в РНР не так давно обсуждавшейся в этом форуме. Кому то это все покажется жестким, возможно даже жестоким, однако считаю что прочитав это многие задумаются, сделают выводы и возможно таки уловят основную мысль и перестанут в начале писать вопрос на столько завуалировано, что сами с трудом понимают о чем речь, а затем говорить что задача все равно не решаема.
Этот материал не ориентирован на какой-либо конкретный язык программирования. Стоит задача показать логику мыслей программиста при решении задачи, но т.к. этот сайт посвящен языку PHP то есстественно конкретные примеры будут показаны для этого языка.

[p]Постановка задачи[/p]

найти логическую схему нахождения даты последнего дня заданного месяца заданного года. Т.е. на входе имеем - номер нужного месяца - М, год - Г. Необходимо получить дату вида Г.М.Д, где Д - последний день заданного месяца.

[p]Решение без логики (предистория) [/p]

[quote]если первая дата 31.01.04 то если месяц прибавить получаеться 01.03.04 что поидее неправильно!! Должно быть поидее 29.02.04 так как в феврале 29 дней[/quote]

[quote]вот еще один пример:
[php]
$date=date("Y.m.d",mktime(0, 0, 0, 12+2, 31, 2004, 1); 
print $date."<br>"; [

/php]

[b]выводит:[/b]
2005.03.02

[b]должна поидее:[/b]
2005.02.28
[/quote]

вот такие посты время от времени появляются... После этого у пробующих возникает стойкое мнение что PHP - отстой, разработчики языка сволочи и он пробует переходить на другие языки. Но не тут то было - и Perl и Shell и С (подозреваю что и все другие языки) делают тоже самое... Тут многие с воплями "Бил Гейтс - маст дай!" ("Опен Сорс маст дай!") начинают форматировать винты с любимой Windows (*nix) и устанавливать другие операционки соответственно. только вот толку от этого никакого... особо рьяные начинают менять железо в надежде на просветление но и это результата не дает. таким образом имеем неправильное решение вида (для PHP): [php]
$date=date("Y.m.d",mktime(0, 0, 0, М, Д, Г); ?>[

/php], что оно неправильное вроде бы как очевидно, потому как в формировании Д должно присутствовать само Д. некоторые могут возразить, что вместо Д в формуле подставляют 31 как наибольшее из возможных чисел, но это тоже не правильно. Смотрим как работает машина (на примере февраля 2004 года):
Месяц равен 2. Затем вычисляем 31-е его число, но машина (хочется сказать "умная машина", но она никак не умная, она просто считать хорошо умеет) видит что в искомом феврале всего 29 дней... И логично прибавляет еще 2 дня и получает... есстественно 2-е марта!

[p]А как же решить?[/p]

И вот тут следует задуматься логически. Если мы не знаем какое именно число будет последним в месяце, то нам нужно его как-то позиционировать. Как. Подумаем...
Лично мне очевидно, как думаю уже и многим что проще позиционировать последнее число искомого месяца как дату предшествующую 1-му числу месяца следующего, ведь все месяцы всегда начинаются с 1-го числа! Итого в виде для PHP имеем:

[php]
php $date=date("Y.m.d",mktime(0, 0, 0, М+1, 0, Г);[

/php]

[p]Заключение[/p]

к чему это я? да к тому что как говорил мой любимый преподаватель по С "Всякий программист может стать математиком, но не всякий математик - программистом. Эти науки тесно взаимосвязаны, но программирование требует кроме четких правил полета мысли и логического мышления."

Замечания, возражения, дополнения принимаются.

url=http://www.php.com.ua/forum/viewtopic.php?t=2960]http://www.php.com.ua/forum/viewtopic.php?t=2960/url]



Обсудить в ФОРУМе - комментариев ()


Путь: Шпаргалки

Если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Контакты Design by webFaction Ukrainian PHP Group 2004-2005