За последние 24 часа нас посетили 100867 программистов и 2646 роботов. Сейчас ищут 1535 программистов ...

Создание скрипта работающего на основе date()

Тема в разделе "PHP для новичков", создана пользователем Stasrot1, 26 сен 2007.

  1. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Здравствуйте уважаемые форумчане! У меня возникла проблема при написании скрипта, который должен определить какое время суток в настоящий момент и в соответствии с этим выводить соответствующее сообщение, а потом как бы совет типа пора спать или добрый день!
    Какое время суток он определяет, а вот с выводом рекомендаций че то нетак, так как какое бы время небыло, всегда выводит что то про ночь!
    Посмотрите пожалуйста мой код, который я написал сам, и укажите в чем я ошибся и как это исправить, желательно объяснив почему я ошибся если не затруднит.
    Заранее спасибо!!!
    Код (Text):
    1.  
    2. <?php
    3.  
    4. //Перечень оснеовных символов форматирования даты и их описание
    5. echo date('z-Y-y-F-m-M-d-j-w-l-D-a-A-h-H-i-s');
    6.  
    7. $god=date('Y');           // Год из 4-х цыфр
    8. $god2=date('y');          //Год из 2-х цыфр
    9. $mesac=date('m');         //Номер месяца
    10. $den=date('d');           //Номер дня в месяце, всегда две цыфры
    11. $den_nedeli=date('w');    //День недели, 0 - соответствует воскресенью
    12. $has24=date('H');         //Часы в 24-х часовом формате
    13. $polden=date('a');        //принимает значения am или pm (т.е. до полудня или послеполудня)
    14. $has12=date('h');         //часы в 12-и часовом формате
    15. $minuta=date('i');        //минуты
    16. $secunda=date('s');       //секунды
    17.  
    18.  
    19. //далее будет блок кода, который должен определять сколько сейчас времени и в соответствии с
    20. этим выводить пользователю соответствующее оповещение. А также выполнять присвоение значения
    21. переменной $vremia от 1 до 5 и далее в соответствии с присвоенным значением выводить на экран
    22. некоторое словосочетание !
    23.  
    24.  
    25. if ($has24<3)
    26.             {$vremia=1; echo "<br><br>Сейчас ночь.";}
    27. else if ($has24<9)
    28.             {$vremia=2; echo "<br><br>Сейчас утро.";}
    29. else if ($has24<15)
    30.             {$vremia=3; echo "<br><br>Сейчас день.";}
    31. else if ($has24<21)
    32.             {$vremia=4; echo "<br><br>Сейчас вечер.";}
    33. else
    34.             {$vremia=5; echo "<br><br>Сейчас ночь.";} ;
    35. echo "<br><br>До этого места код выполняется правильно, вроде как правильно.<br>";
    36.  
    37. if ($vremia=1)
    38.             {echo "<br>Привет! Ты явно любиш поработать ночью!";}
    39. else if  ($vremia=2)
    40.             {echo "Доброе утро! Встреть новый день с улыбкой!";}
    41. else if  ($vremia=3)
    42.             {echo "Добрый день! Как идут дела?";}
    43. else if  ($vremia=4)
    44.             {echo "Как насчет немного размять пальцы рук, кисти и так далее? Немного
    45. взбодрись, ведь уже вечер!";}
    46. else if ($vremia=5)
    47.             {echo "Как насчет того, чтобы свернуть деятельность и отправится на отдых?";}
    48. else
    49.             {echo "Сейчас $has24 часов!<br>";}
    50.  
    51.  
    52. //В итоге когда к примеру четко утро скрипт выводит следующее: Привет! Ты явно любиш
    53. поработать ночью!, хотя по моим рассуждениям должен бывывести следующее: Доброе утро! Встреть
    54. новый день с улыбкой! Что не так? Не могу понять.
    55.  
    56. ?>
     
  2. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    замените это
    на

    Вы путаете присваивание (=) с равенством(== или ===).
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Stasrot1
    а то, что фразы будут выводиться в зависимости от времени сервера, не смущает?
     
  4. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Нет не смущает! Я прекрасно понимаю, что PHP выполняется на стороне сервера а не на стороне клиентской машины, а так как выполнение скрипта происходит на сервере, то и время будет серверное. Чтобы вывод времени был в соответствии с клиентским надо пользоваться например яваскриптами вроде так , так как они выполняются на стороне клиента при этом совершенно не нагружая сервер!

    Большое спасибо за то что указали на ошибку! И указали в чем я заблуждался! Спасибо! Я исправил как Вы сказали и все заработало как я и хотел!

    И вот следующий вопрос: А можно ли сделать так чтобы как то компенсировалась разница во времени между часовыми поясами, а скрипт выполнялся бы на стороне попрежнему сервера.
    Хотя вариант на стороне клиента я не отвергаю, просто я только взялся за ПШП, и за яву сейчас братьсся наверное сразу не стоит, вы как считаете?
     
  5. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    можете узнать часовой пояс сервера и приплюсовывать определенное кол-во часов или уменьшать, если нужно другое время какое-то.
     
  6. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Между какими и чьими часовыми поясами? Клиента и сервера?

    пХп (php), а не пШп и яваскрипт (javascript), не ява. :) Можно сказать, что я придираюсь, но так дойдём и до того, что php будут звать "сосиска", а потом годай что хотел сказать автор. Про ява и яваскрипт - вообще молчу. Вот забредёшь случайно на форум java-программистов и спросишь "а как на яве новое окно по клику открыть?" и как не было тебя, ибо затопчут. :)
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    вариант раз. Предоставить такую "фичу" только зарегистрированным пользователям и дать им возможность самим указать часовой пояс и формат даты

    вариант два. С помощью JavaScript'а брать время пользователя и интерпретировать как дуще угодно.

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

    P.S. не путай JAVA и JavaScript ;)
     
  8. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    смысл от часов тогда вообще? Как будто у меня в компьютере нет часов. Не вижу в этом смысла )
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    если выводить именно время, то никакого, если же делать именно то, что хочет автор, то вполне жизнеспособный вариант
     
  10. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Правильно! Если вывести просто время то оно не нужно так как в любой ОС есть часики. Вообще это я упражняюсь в применении новых знаний PHP если уж на то пошло. Вот уперся в проблему с разницей между раенством и присвоением, мне ее помогли решить и на том спасибо, теперь больше не буду их путать, по крайней мере постараюсь!

    Меня может и можно сразу затоптать, но я очень смутно представляю разницу между явой и яваскриптом , если объясните буду весьма благодарен!

    Теперь вопрос по существу: Если делать возможным изменение времени в зависимости от разницы между временем сервера и временем часового пояса пользователя, то как я понимаю, пользователь должен указать скрипту в каом часовом поясе он находится, так? А значит я должен сделать на страничке какой то управляющий элемент интерактивности, если можно так выразится - форму в виде например таких кружочков которые можно выбирать и при том только единственный вариант (чекбокс вроде называется)? Подскажите как это лучше реализовать. Пока речи о пользователях не идет и все делаю пока в одном файле, так как потом, поняв механизм, можно разделить код по разным файлам и включать их в нужных местах. :)
     
  11. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Спасибо за ссылки! Почитал только что, теперь путаться не буду! Разница мне показалась очевидной с первых строк описания этих технологий.


    Как это можно реализовать? Направте пожалуйста.[/quote]
     
  12. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    radio button называется
    посмотри на такое же в настройках профиля в этом форуме ( http://php.ru/forum/profile.php?mode=editprofile "Часовой пояс")
     
  13. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    спасибо что напомнили.


    Я так и представлял это, и даже вспоминал, что когда я регистрировался на сайте мне предлогалось выбрать вариант времени! Но я непонимаю как организовать взаимодействие этой формы с кодом в ПХП. Такую форму немного помучавшись я быстро не быстро но напишу, а вот как она взаимодействовать должна не понимаю пока. GMT это наверное какойто особый формат времени в PHP или нет? [/quote]
     
  14. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Посмотрел документацию, вот что нашел: вроде в ту сторону рою?

    Код (Text):
    1. gmdate
    2.  
    3. (PHP 3, PHP 4, PHP 5)
    4. gmdate -- Форматирует дату/время по Гринвичу
    5. Описание
    6. string gmdate ( string format [, int timestamp] )
    7.  
    8. Эта функция идентична функции date() за исключением того, что возвращает время по Гринвичу (GMT). Например, в Финляндии (GMT +0200), первая строка в следующем примере выведет "Jan 01 1998 00:00:00", а вторая - "Dec 31 1997 22:00:00".
    9.  
    10. Пример 1. gmdate() example
    11. <?php
    12. echo date("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
    13. echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
    14. ?>
    15.  
    16.     Замечание: В семействе ОС Microsoft Windows системные библиотеки, реализующие эту функцию, содержат ошибки, поэтому функция gmdate() на этих системах не поддерживает отрицательные значения аргумента timestamp. Для более подробной информации, см. сообщения об ошибках: #22620, #22457, и #14391.
    17.  
    18.     В операционных системах Unix/Linux эта проблема не возникает, так как системные библиотеки в этих системах реализованы корректно.
    19.  
    20.     PHP не может исправить ошибки в системных библиотеках. Для решения этой и подобных проблем обращайтесь к производителю операционной системы.

    Или не в ту? И как мне быть, ведь я работаю под виндой, как тестить то скрипт мой в итоге? И как мне использовать вышеуказанное, сразу не доходит. Помогите разобраться!
     
  15. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    посмотри на php.net комменты к gmdate. Там есть функция, подсчитывающая время в зависимости от часового пояса. От этого и начинай копать. Получил дату, сверился с часовым поясом, вывел сообщение.
    а что такое? если про
    так у тебя положительные будут :)

    off: порадовало :D
     
  16. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Сейчас вот смотрю коментарии , жаль что только на английском! Туговато у меня с ним, ну да ничего, постараюсь разобраться! Если чего не получится, то напишу сюдаже! Хотя постараюсь самостоятельно. И еще: чем это порадовал? :)
     
  17. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    сколько баг висит
     
  18. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    этот вариант наверно всё же отпадает... очень много юзеров сидят через спутник, и по IP соответственно определить точное местонахождение юзера нельзя. Я например получаюсь из Швеции, хотя и живу под Орлом.. :)
     
  19. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Вот что я накопал: Сдесь объявляются две функции одна (первая как я понял определяет временной штамп в соответствии с гринвичем, вторая достав этот штамп откуда то например из базы или из заранее указанной переменной считаеи сколько времени у пользователя, учитывая то какой часовой пояс он указал. Как мне дальше с этими функциями быть? И пожалуйста проверьте их на корректность, что то мне не очень нравится то что в итоге выводится в окно браузера, может я чего напортачил или просто чего то не понимаю? Вот что настораживает: В результате выполнения скрипта выводится время в формате: Y-m-d H:i:s а после выводится временной штамп в секндах, дак вот когда обновляеш страничку штамп выводимый в браузер меняет свое значение а время в указанном формате время не меняет, не очень понятно почему. Подскажите. Заранее спасибо!

    Код (Text):
    1. <?php
    2. /* 1. Получение текущего timestamp формата по GMT. Именно этот timestamp показывают часы в
    3. г.Гринвиче в настоящий момент. Это время мы и сохраним в базе данных.
    4.    2. Получение текстового представления даты, если известны GMT-timestamp и целевая часовая
    5. зона (которая конечно отлична от GMT). Оно и будет выведено в браузере пользователя.*/
    6.  
    7. //Работа со временем по GMT
    8.  
    9. //Вычисляем timestamp в Гринвиче, который соответствует локальному timestamp-значению.
    10.  
    11. function local2gm($local_stamp=false)  {
    12.    if ($local_stamp===false)
    13.  $local_stamp=time();
    14.  
    15. //Получаем смещениечасовой зоны в секундах.
    16.  
    17. $tz_smehenie_sec=date("Z", $local_stamp);
    18.  
    19. //Вычитаем разницу - получаем время по GMT.
    20.  
    21. return $local_stamp - $tz_smehenie_sec;
    22.  }
    23.  
    24. // Вычисляет локальный timestamp в Гринвиче, который
    25. // соответствует timestamp-формату значению по GMT. Можно указать
    26. // смещение локальной зоны относительно GMT (в часах),
    27. // тогда будет осуществлен перевод в эту зону (а не в текущую локальную).
    28.  
    29. function gm2local($gmStamp=false, $tzOffset=false) {
    30.   if ($gmStamp === false) return time();
    31.   // Получаем смещение часовой зоны в секундах.
    32.   if ($tzOffset === false)
    33.     $tzOffset = date("Z", $gmStamp);
    34.   else
    35.     $tzOffset *= 60*60;
    36.   // Вычитаем разницу - получаем время по GMT.
    37.   return $gmStamp + $tzOffset;
    38. }
    39.  
    40. $format="Y-m-d  H:i:s";
    41. $stampGMT=1190890069;
    42. $tz=-3;
    43.  
    44.  
    45. echo '<br>Это время местное в соответствии с указанной разницей в часах между гринвичем и
    46. местным временем на момент его последнего занесения в переменную $stampGMT:<br>';
    47. echo date($format, gm2local($stampGMT, $tz));
    48. echo "<br>Это время по гринвичу, сосчитанное в секундах с момента начала эпохи unix:<br>";
    49. echo local2gm(time());
    50. ?>
     
  20. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    потому что
    $stampGMT у тебя не меняется

    отсебятина:
    PHP:
    1. <?php
    2. // $GMT - смещение относительно Гринвича
    3. // $format - формат выведения даты
    4. // $opt - true/false вывести отформатированную дату/timestamp
    5. function GetTime($GMT,$format,$opt=true)
    6. {
    7.     if (date('I')) // если «летнее» время
    8.         $GMT++;
    9.  
    10.     $timestamp = time() + $GMT * 3600;
    11.     return ($opt)?gmdate($format, $timestamp):$timestamp;
    12. }
    13.  
    14. function Greeting($hour)
    15. {
    16.     if($hour<=4 || $hour>=23)
    17.         $mess = 'пора ложиться спать';
    18.     if($hour>4 && $hour<=7)
    19.         $mess = 'А ну, спать пошёл';
    20.     if($hour>7 && $hour<=9)
    21.         $mess = 'Ну чё? Выспался? ;)';
    22.     if($hour>9 && $hour<23)
    23.         $mess = 'Arbeiten, ниггер!!!';
    24.  
    25.     return $mess;
    26. }
    27.  
    28.  
    29. $user_format = 'H:i:s d-m-Y';
    30. $user_GMT = +2;
    31.  
    32. $user_timestamp=GetTime($user_GMT,$user_format,0);
    33. $user_date=GetTime($user_GMT,$user_format);
    34. $user_hour=gmdate('H', $user_timestamp);
    35.  
    36. echo 'Дата: '.$user_date.'<br />'.Greeting($user_hour);
    37.  
    38. ?>
     
  21. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Спасибо! Я впринцепе так и думал, просто мне нехватало уверенности в этом! Т.е . если к примеру использовать вышеописанные функци (которые я приводил) можно к примеру занести в базу данных временнойштамп и при следующем заходе на сайт вывести примерно следующее : Вы были сдесь последний раз тогдато во столькото! Правильно?

    За отсебятину спасибо! С первого раза прочитал ее и все вроде понятно стало что к чему в этой отсебятине! Попробую теперь с этим что нибудь сделать!

    Вот как бы организовать запись временного штампа в базу данных? Это далеко не по теме этого топика, но все же может кините ссылочку на соответствующий топик? Заранее спасибо!
    :)
     
  22. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    само собой

    для MySQL
    функции php работы с БД
    INSERT при первой записи
    UPDATE при последующих
     
  23. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Спасибо за ссылки!
    Как я уже понял, для того чтобы базой данных пользоваться сначала надо установить сервер баз данных на компьютер а потом создать необходимую базу данных и орудовать с ней как только можно в зависимости от целей!?
     
  24. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  25. Stasrot1

    Stasrot1 Активный пользователь

    С нами с:
    26 сен 2007
    Сообщения:
    119
    Симпатии:
    0
    Адрес:
    Тут недалеко, гдето вон за той горой!
    Установил! Все работает! Надо только теперь еще и MySQL освоить! Но как я уже понял, без баз данных сейчас далеко не уедеш! Буду осваивать! Чтож это становится еще более интересным.