Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как найти последнее вскресенье марта?
 
 автор: Владимир55   (09.11.2007 в 17:16)   письмо автору
 
 

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

   
 
 автор: elenaki   (09.11.2007 в 17:49)   письмо автору
 
   для: Владимир55   (09.11.2007 в 17:16)
 

если часы переводят на час вперед - это оно :)

   
 
 автор: Владимир55   (09.11.2007 в 18:06)   письмо автору
 
   для: elenaki   (09.11.2007 в 17:49)
 

Это понятно. Собственно, я и ищу тот день, когда эти часы переведут.

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

   
 
 автор: sim5   (09.11.2007 в 18:53)   письмо автору
 
   для: Владимир55   (09.11.2007 в 18:06)
 

А что же не напишите? Собственно и функций никаких сторонних не надо:

echo 'Номер месяца: '.date('n').'<br>';
echo 'Количество дней в месяце: '.date('t').'<br>';
echo 'Число сегодня: '.date('d').'<br>';
echo 'День недели: '.date('w').'<br><br>';

if (date('n')==3 && date('w')==0) {
  if (date('d')+7 > date('t')) echo "Переведите время.";
}

   
 
 автор: Владимир55   (09.11.2007 в 19:35)   письмо автору
 
   для: sim5   (09.11.2007 в 18:53)
 

Я имел виду не сообщение о том, что вожделенный миг наступил, а возможность узнать сегодня на какую дату приходится весенний (и осенний) перевод стрелок. У меня как-то очень громоздко получается...

   
 
 автор: sim5   (09.11.2007 в 19:43)   письмо автору
 
   для: Владимир55   (09.11.2007 в 19:35)
 

А я вам и не предлагаю заставлять пользователя "жить по новому", это просто пример действия по условию.

   
 
 автор: Владимир55   (10.11.2007 в 15:37)   письмо автору
 
   для: sim5   (09.11.2007 в 19:43)
 

Спасибо, почти так у меня и сделано:

    // Ищем последнее воскресенье марта
    for ($i = 31; $i >= 20; $i--)
    {
        $mart = mktime(0, 0, 0, 3, $i, $Year, 0);
        if (date ("l", $mart) == "Sunday") break;
    }

   
 
 автор: sim5   (10.11.2007 в 16:11)   письмо автору
 
   для: Владимир55   (10.11.2007 в 15:37)
 

И зачем такие сложности?

   
 
 автор: Владимир55   (10.11.2007 в 16:59)   письмо автору
 
   для: sim5   (10.11.2007 в 16:11)
 

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

А как лучше? Чтобы точно с теми же функциями, но элегантнее. Чисто для опыта.

   
 
 автор: sim5   (10.11.2007 в 17:12)   письмо автору
 
   для: Владимир55   (10.11.2007 в 16:59)
 

Функцией date() можно получить четыре параметра даты, остается только определить интересующий день. Зная сколько дней в месяце, текущее число, день недели и что в неделе 7 дней, неужели этого не достаточно, чтобы узнать интересующее вас? Зачем цикл?

if (date('n')==3 && date('w')==0 && date('d')+7 > date('t')) - выполнение этого условия и даст последнее воскресенье марта.

   
 
 автор: Саня   (10.11.2007 в 23:45)   письмо автору
 
   для: Владимир55   (09.11.2007 в 17:16)
 

<?
$l 
strtotime("last sunday"mktime(000331));

Таким образом можно узнать последний день любого месяца в любом году.

   
 
 автор: Владимир55   (11.11.2007 в 12:51)   письмо автору
 
   для: Саня   (10.11.2007 в 23:45)
 

" автор: sim5 (10.11.2007 в 17:12) Зачем цикл?"

Освободиться от цикла весьма заманчиво. Но я не понял, как это сделать с помощью Вашего кода. Сейчас у меня так:

for ($i = 31; $i >= 20; $i--) 
    { 
        $mart = mktime(0, 0, 0, 3, $i, $Year, 0); 
        if (date ("l", $mart) == "Sunday") break; 
    }
echo $i ; //  Получаем 30

Я запускаю этот скрипт в любой день и получаю сведения о том, что последнее воскресенье марта приходится на 30-е число.

Если можно, допишите в Вашем коде echo, выводящее аналогичную информацию.

   
 
 автор: sim5   (11.11.2007 в 12:54)   письмо автору
 
   для: Владимир55   (11.11.2007 в 12:51)
 


<?
if (date('n')==&& date('w')==&& date('d')+date('t')) echo date('d');
?>

   
 
 автор: Владимир55   (11.11.2007 в 13:50)   письмо автору
 
   для: sim5   (11.11.2007 в 12:54)
 

Ваш код выполняет совершенно другую функцию.
Если скрипт с вашим кодом запустить сегодня, 11 ноября, то он ничего не выводит. Как я понимаю, он даст свое сообщение лишь тогда, когда наступит последнее воскресенье марта. Естественно, что эта функция осуществляется без цикла. Но это совершенно другая задача, и мой пост совсем не об этом.

А меня интересует такой код, который, будучи запущенным в составе скрипта в любой день, выведет дату последнего воскресенья марта. Можете ли вы ЭТУ задачу решить без цикла?

   
 
 автор: sim5   (11.11.2007 в 14:48)   письмо автору
 
   для: Владимир55   (11.11.2007 в 13:50)
 

Да, то что я написал, запустит событие именно в день перевода времени, а вы это только поняли? Если вам нужен этот день просто для информации, то и в этом случае нет смыла гонять для этого цикл - смотрите код от Сани.

   
 
 автор: Владимир55   (11.11.2007 в 17:03)   письмо автору
 
   для: sim5   (11.11.2007 в 14:48)
 

*** смотрите код от Сани***
Код от Сани дает последний день месяца. И Саня написал это битым словом. Вы что, этого не поняли?

*** Да, то что я написал, запустит событие именно в день перевода времени, а вы это только поняли? ***
Нет, я это понял раньше. И только не мог понять, зачем Вы его пишете? В этой теме я шесть раз формулировал свой вопрос, как можно его не понять? И Вы все время мне пишете, что я понапрасну использовал цикл и можно обойтись без него, упорно приводя код, который никому не нужен, поскольку заведомо не решает поставленной задачи. А я, считая Вас авторитетным специалистом, второй день пытаюсь понять, в чем моя ошибка и как обойтись без цикла, тогда как ошибки нет и без цикла задача не решаема.

Зачем вы морочите голову?

   
 
 автор: sim5   (11.11.2007 в 17:53)   письмо автору
 
   для: Владимир55   (11.11.2007 в 17:03)
 

Вот что я вам скажу. Я исходил сразу из эого:
1. Если мне нужно узнать что-то, то это для того, чтобы произвести определенные действия, в данном случае предупредить пользователя, например, либо установить некую переменную. Вот поэтому я вам так и написал - узнаем, что наступило последнее воскресенье марта, а уж дальше что хотите.
2. Если вам просто нужно знать этот день, например, чтобы просто пользователи не забыли, то можно вообще не нагружать интерпретатор ничем, достаточно посмотреть в календарь (есть в системе) и написать это на странице для пользователей.
3. Что касается вашего кода - после слова for, дальше уже меня ничего не интересовало, потому как считаю это глупым.
4. Что касается кода от Сани, то вы и над ним не хотите подумать - ничего в нем битого нет, стоит только чуточку добавить (в исходнике год не указан, потому будет отображаться март текущего года):

<?
$d 
strtotime("last sunday"mktime(000331здесь указать интересующий вас год));
echo 
date('d'$d);
?>

И код отобразит вам то, что вы так желаете.

Не я вам морочу голову, а вы сами себе. Мозгами шевелить надо, если вы хотите писать программы.

PS. Можете меня вообще считать за "NULL", мне все равно. Что конкретно касается ваших раздумий над вашей ошибкой, то вы практически на вопрос - "Сколько раз поместиться 2 в 10", написали цикл в котором последовательно вычитали 2 из 10, вместо того, чтобы разделить 10 на 2.

   
 
 автор: Shiva   (11.11.2007 в 18:42)   письмо автору
 
   для: sim5   (11.11.2007 в 17:53)
 

С интересом слежу за дискуссией.
sim5, код Сани действительно работает.
Но вы, при всем уважении, раз за разом слали человеку бессмысленные образцы кода. Бессмысленные с точки зрения поставленной задачи.
Да еще со снисходительной интонацией. Мне бы на его месте это куда раньше надоело...

   
 
 автор: sim5   (11.11.2007 в 19:29)   письмо автору
 
   для: Shiva   (11.11.2007 в 18:42)
 

Можеть быть и так. Но в чем состоит его задача - узнать последнее воскресенье месяца? Если то, что я написал, узнает поледний день субботы августа месяца - пусть в меня каждый бросит камень. Тогда уж сразу задача, думаю, должна была дополнятся еще и "для чего".
Собственно "для чего" нужно это автору, стало известно немного позже, тем не менее, вопросы задавались мне, а не Сане, который дал то что нужно, однако автор и этого не понял.
Ответ на задачу кроется в готовом виде в "Свойства: Дата и время" системного календаря, это мое мнение, а вы можете думать иначе.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования