Здравствуйте уважаемые форумчане! У меня возникла проблема при написании скрипта, который должен определить какое время суток в настоящий момент и в соответствии с этим выводить соответствующее сообщение, а потом как бы совет типа пора спать или добрый день! Какое время суток он определяет, а вот с выводом рекомендаций че то нетак, так как какое бы время небыло, всегда выводит что то про ночь! Посмотрите пожалуйста мой код, который я написал сам, и укажите в чем я ошибся и как это исправить, желательно объяснив почему я ошибся если не затруднит. Заранее спасибо!!! Код (Text): <?php //Перечень оснеовных символов форматирования даты и их описание echo date('z-Y-y-F-m-M-d-j-w-l-D-a-A-h-H-i-s'); $god=date('Y'); // Год из 4-х цыфр $god2=date('y'); //Год из 2-х цыфр $mesac=date('m'); //Номер месяца $den=date('d'); //Номер дня в месяце, всегда две цыфры $den_nedeli=date('w'); //День недели, 0 - соответствует воскресенью $has24=date('H'); //Часы в 24-х часовом формате $polden=date('a'); //принимает значения am или pm (т.е. до полудня или послеполудня) $has12=date('h'); //часы в 12-и часовом формате $minuta=date('i'); //минуты $secunda=date('s'); //секунды //далее будет блок кода, который должен определять сколько сейчас времени и в соответствии с этим выводить пользователю соответствующее оповещение. А также выполнять присвоение значения переменной $vremia от 1 до 5 и далее в соответствии с присвоенным значением выводить на экран некоторое словосочетание ! if ($has24<3) {$vremia=1; echo "<br><br>Сейчас ночь.";} else if ($has24<9) {$vremia=2; echo "<br><br>Сейчас утро.";} else if ($has24<15) {$vremia=3; echo "<br><br>Сейчас день.";} else if ($has24<21) {$vremia=4; echo "<br><br>Сейчас вечер.";} else {$vremia=5; echo "<br><br>Сейчас ночь.";} ; echo "<br><br>До этого места код выполняется правильно, вроде как правильно.<br>"; if ($vremia=1) {echo "<br>Привет! Ты явно любиш поработать ночью!";} else if ($vremia=2) {echo "Доброе утро! Встреть новый день с улыбкой!";} else if ($vremia=3) {echo "Добрый день! Как идут дела?";} else if ($vremia=4) {echo "Как насчет немного размять пальцы рук, кисти и так далее? Немного взбодрись, ведь уже вечер!";} else if ($vremia=5) {echo "Как насчет того, чтобы свернуть деятельность и отправится на отдых?";} else {echo "Сейчас $has24 часов!<br>";} //В итоге когда к примеру четко утро скрипт выводит следующее: Привет! Ты явно любиш поработать ночью!, хотя по моим рассуждениям должен бывывести следующее: Доброе утро! Встреть новый день с улыбкой! Что не так? Не могу понять. ?>
Нет не смущает! Я прекрасно понимаю, что PHP выполняется на стороне сервера а не на стороне клиентской машины, а так как выполнение скрипта происходит на сервере, то и время будет серверное. Чтобы вывод времени был в соответствии с клиентским надо пользоваться например яваскриптами вроде так , так как они выполняются на стороне клиента при этом совершенно не нагружая сервер! Большое спасибо за то что указали на ошибку! И указали в чем я заблуждался! Спасибо! Я исправил как Вы сказали и все заработало как я и хотел! И вот следующий вопрос: А можно ли сделать так чтобы как то компенсировалась разница во времени между часовыми поясами, а скрипт выполнялся бы на стороне попрежнему сервера. Хотя вариант на стороне клиента я не отвергаю, просто я только взялся за ПШП, и за яву сейчас братьсся наверное сразу не стоит, вы как считаете?
можете узнать часовой пояс сервера и приплюсовывать определенное кол-во часов или уменьшать, если нужно другое время какое-то.
Между какими и чьими часовыми поясами? Клиента и сервера? пХп (php), а не пШп и яваскрипт (javascript), не ява. Можно сказать, что я придираюсь, но так дойдём и до того, что php будут звать "сосиска", а потом годай что хотел сказать автор. Про ява и яваскрипт - вообще молчу. Вот забредёшь случайно на форум java-программистов и спросишь "а как на яве новое окно по клику открыть?" и как не было тебя, ибо затопчут.
вариант раз. Предоставить такую "фичу" только зарегистрированным пользователям и дать им возможность самим указать часовой пояс и формат даты вариант два. С помощью JavaScript'а брать время пользователя и интерпретировать как дуще угодно. вариант три. Найти базу IP с привязкой к городам и, основываясь на ней, определять часовой пояс. P.S. не путай JAVA и JavaScript
если выводить именно время, то никакого, если же делать именно то, что хочет автор, то вполне жизнеспособный вариант
Правильно! Если вывести просто время то оно не нужно так как в любой ОС есть часики. Вообще это я упражняюсь в применении новых знаний PHP если уж на то пошло. Вот уперся в проблему с разницей между раенством и присвоением, мне ее помогли решить и на том спасибо, теперь больше не буду их путать, по крайней мере постараюсь! Меня может и можно сразу затоптать, но я очень смутно представляю разницу между явой и яваскриптом , если объясните буду весьма благодарен! Теперь вопрос по существу: Если делать возможным изменение времени в зависимости от разницы между временем сервера и временем часового пояса пользователя, то как я понимаю, пользователь должен указать скрипту в каом часовом поясе он находится, так? А значит я должен сделать на страничке какой то управляющий элемент интерактивности, если можно так выразится - форму в виде например таких кружочков которые можно выбирать и при том только единственный вариант (чекбокс вроде называется)? Подскажите как это лучше реализовать. Пока речи о пользователях не идет и все делаю пока в одном файле, так как потом, поняв механизм, можно разделить код по разным файлам и включать их в нужных местах.
Спасибо за ссылки! Почитал только что, теперь путаться не буду! Разница мне показалась очевидной с первых строк описания этих технологий. Как это можно реализовать? Направте пожалуйста.[/quote]
radio button называется посмотри на такое же в настройках профиля в этом форуме ( http://php.ru/forum/profile.php?mode=editprofile "Часовой пояс")
спасибо что напомнили. Я так и представлял это, и даже вспоминал, что когда я регистрировался на сайте мне предлогалось выбрать вариант времени! Но я непонимаю как организовать взаимодействие этой формы с кодом в ПХП. Такую форму немного помучавшись я быстро не быстро но напишу, а вот как она взаимодействовать должна не понимаю пока. GMT это наверное какойто особый формат времени в PHP или нет? [/quote]
Посмотрел документацию, вот что нашел: вроде в ту сторону рою? Код (Text): gmdate (PHP 3, PHP 4, PHP 5) gmdate -- Форматирует дату/время по Гринвичу Описание string gmdate ( string format [, int timestamp] ) Эта функция идентична функции date() за исключением того, что возвращает время по Гринвичу (GMT). Например, в Финляндии (GMT +0200), первая строка в следующем примере выведет "Jan 01 1998 00:00:00", а вторая - "Dec 31 1997 22:00:00". Пример 1. gmdate() example <?php echo date("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998)); echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998)); ?> Замечание: В семействе ОС Microsoft Windows системные библиотеки, реализующие эту функцию, содержат ошибки, поэтому функция gmdate() на этих системах не поддерживает отрицательные значения аргумента timestamp. Для более подробной информации, см. сообщения об ошибках: #22620, #22457, и #14391. В операционных системах Unix/Linux эта проблема не возникает, так как системные библиотеки в этих системах реализованы корректно. PHP не может исправить ошибки в системных библиотеках. Для решения этой и подобных проблем обращайтесь к производителю операционной системы. Или не в ту? И как мне быть, ведь я работаю под виндой, как тестить то скрипт мой в итоге? И как мне использовать вышеуказанное, сразу не доходит. Помогите разобраться!
посмотри на php.net комменты к gmdate. Там есть функция, подсчитывающая время в зависимости от часового пояса. От этого и начинай копать. Получил дату, сверился с часовым поясом, вывел сообщение. а что такое? если про так у тебя положительные будут off: порадовало
Сейчас вот смотрю коментарии , жаль что только на английском! Туговато у меня с ним, ну да ничего, постараюсь разобраться! Если чего не получится, то напишу сюдаже! Хотя постараюсь самостоятельно. И еще: чем это порадовал?
этот вариант наверно всё же отпадает... очень много юзеров сидят через спутник, и по IP соответственно определить точное местонахождение юзера нельзя. Я например получаюсь из Швеции, хотя и живу под Орлом..
Вот что я накопал: Сдесь объявляются две функции одна (первая как я понял определяет временной штамп в соответствии с гринвичем, вторая достав этот штамп откуда то например из базы или из заранее указанной переменной считаеи сколько времени у пользователя, учитывая то какой часовой пояс он указал. Как мне дальше с этими функциями быть? И пожалуйста проверьте их на корректность, что то мне не очень нравится то что в итоге выводится в окно браузера, может я чего напортачил или просто чего то не понимаю? Вот что настораживает: В результате выполнения скрипта выводится время в формате: Y-m-d H:i:s а после выводится временной штамп в секндах, дак вот когда обновляеш страничку штамп выводимый в браузер меняет свое значение а время в указанном формате время не меняет, не очень понятно почему. Подскажите. Заранее спасибо! Код (Text): <?php /* 1. Получение текущего timestamp формата по GMT. Именно этот timestamp показывают часы в г.Гринвиче в настоящий момент. Это время мы и сохраним в базе данных. 2. Получение текстового представления даты, если известны GMT-timestamp и целевая часовая зона (которая конечно отлична от GMT). Оно и будет выведено в браузере пользователя.*/ //Работа со временем по GMT //Вычисляем timestamp в Гринвиче, который соответствует локальному timestamp-значению. function local2gm($local_stamp=false) { if ($local_stamp===false) $local_stamp=time(); //Получаем смещениечасовой зоны в секундах. $tz_smehenie_sec=date("Z", $local_stamp); //Вычитаем разницу - получаем время по GMT. return $local_stamp - $tz_smehenie_sec; } // Вычисляет локальный timestamp в Гринвиче, который // соответствует timestamp-формату значению по GMT. Можно указать // смещение локальной зоны относительно GMT (в часах), // тогда будет осуществлен перевод в эту зону (а не в текущую локальную). function gm2local($gmStamp=false, $tzOffset=false) { if ($gmStamp === false) return time(); // Получаем смещение часовой зоны в секундах. if ($tzOffset === false) $tzOffset = date("Z", $gmStamp); else $tzOffset *= 60*60; // Вычитаем разницу - получаем время по GMT. return $gmStamp + $tzOffset; } $format="Y-m-d H:i:s"; $stampGMT=1190890069; $tz=-3; echo '<br>Это время местное в соответствии с указанной разницей в часах между гринвичем и местным временем на момент его последнего занесения в переменную $stampGMT:<br>'; echo date($format, gm2local($stampGMT, $tz)); echo "<br>Это время по гринвичу, сосчитанное в секундах с момента начала эпохи unix:<br>"; echo local2gm(time()); ?>
потому что $stampGMT у тебя не меняется отсебятина: PHP: <?php // $GMT - смещение относительно Гринвича // $format - формат выведения даты // $opt - true/false вывести отформатированную дату/timestamp function GetTime($GMT,$format,$opt=true) { if (date('I')) // если «летнее» время $GMT++; $timestamp = time() + $GMT * 3600; return ($opt)?gmdate($format, $timestamp):$timestamp; } function Greeting($hour) { if($hour<=4 || $hour>=23) $mess = 'пора ложиться спать'; if($hour>4 && $hour<=7) $mess = 'А ну, спать пошёл'; if($hour>7 && $hour<=9) $mess = 'Ну чё? Выспался? ;)'; if($hour>9 && $hour<23) $mess = 'Arbeiten, ниггер!!!'; return $mess; } $user_format = 'H:i:s d-m-Y'; $user_GMT = +2; $user_timestamp=GetTime($user_GMT,$user_format,0); $user_date=GetTime($user_GMT,$user_format); $user_hour=gmdate('H', $user_timestamp); echo 'Дата: '.$user_date.'<br />'.Greeting($user_hour); ?>
Спасибо! Я впринцепе так и думал, просто мне нехватало уверенности в этом! Т.е . если к примеру использовать вышеописанные функци (которые я приводил) можно к примеру занести в базу данных временнойштамп и при следующем заходе на сайт вывести примерно следующее : Вы были сдесь последний раз тогдато во столькото! Правильно? За отсебятину спасибо! С первого раза прочитал ее и все вроде понятно стало что к чему в этой отсебятине! Попробую теперь с этим что нибудь сделать! Вот как бы организовать запись временного штампа в базу данных? Это далеко не по теме этого топика, но все же может кините ссылочку на соответствующий топик? Заранее спасибо!
Спасибо за ссылки! Как я уже понял, для того чтобы базой данных пользоваться сначала надо установить сервер баз данных на компьютер а потом создать необходимую базу данных и орудовать с ней как только можно в зависимости от целей!?
Установил! Все работает! Надо только теперь еще и MySQL освоить! Но как я уже понял, без баз данных сейчас далеко не уедеш! Буду осваивать! Чтож это становится еще более интересным.