Как "подкрутить" время на серваке?

  • Автор темы Golden Grey
  • Дата начала

Golden Grey

Guest
Как "подкрутить" время на серваке?

Здравствуйте! Помогите решить такую проблемку: есть сайт - http://terbuny.net и форум на этом сайте http://terbuny.net/forum/ На главной странице сайта есть скрипт вывода последних тем форума. Проблема в том, что сервак сайта расположен в США и разница во времени с московским - 8 часов. Из-за этого на главную выдаются последние темы с неправильным временем. Требуется "подкрутить" в скрипте время до московского. Вот код скрипта вывода последних тем:

.
PHP:
<?
// код не нужен
?>
Помогите, пожалуйста! Буду очень признателен
 

Golden Grey

Guest
Версия PHP? 4.4.1.

Остальные параметры не знаю требуются или нет, но на всякий случай тоже приведу:
PERL version 5.8.7
MySQL version 4.1.13-standard

-~{}~ 18.03.06 02:48:

Ну так что с изменением времени?
 

SiMM

Новичок
> Проблема в том, что сервак сайта расположен в США и разница во времени с московским - 8 часов.
Сейчас: 18.03.2006, 08:44
Не вижу разницы. А вообще - ищите настройку в IPB.
 

Golden Grey

Guest
Нет, вы не поняли - в самом IPB я настроил всё через админку как надо - по всему форуму время отображается верно - московское. Вся беда со скриптом вывода горячих тем - это уже писал сторонний разработчик и настройки форума на него не распространяются. Пробовал обращаться к автору скрипта, но не достучался - он уже забросил его поддержку.

Такая же ерунда у меня со всеми php-скриптами, где нет настроек часового пояса. Например в скрипте "Быстрый чат" (стоит на главной http://terbuny.net) я с помощью форума разработчиков разобрался как "подкрутить" время - там надо было просто добавить пару строк в код скрипта, которые приплюсовывали n-ное количество секунд ко времени сервака "докручивая" его до московского. Попробовал после этого по аналогии сделать и в выводе горячих тем, но не получилось - я ведь не программист, а юрист - в PHP абсолютно ничего не знаю, владею только HTML.

Если хотите - могу сбросить сюда коды обоих скриптов - Быстрого чата и Вывода горячих тем, чтобы было понятно где именно требуется "подкрутить".

Поможете?
 

alekciy

Новичок
Сделай поиск по коду следующих функций: getdate, gettimeofday, time, strftime, localtime. Скорее всего одной из них дата и формируеться. Останется только добавить к дате нужную поправку.
 

Golden Grey

Guest
Вообще, как я понял, отвечают в скрипте за получение даты и времени вот эти строки:

PHP:
// Формат даты и времени.
// Дата по умолчанию: dd month year (День, Месяц, Год)
// Время по умолчанию: hh:mm ampm ~ Временная Зона

$datedisplay = 'd.m.Y';
$timedisplay = 'в H:i';
и вот эти:

PHP:
// Формат и вывод результата.
while ($post = $db->fetch_row($getposts)) {
$post[full_title] = $post[title];
if ($showtopiclength == 1 AND strlen($post[full_title]) > $topiclength) {
        $post[short_title] = substr($post[full_title],0,$topiclength);
        $post[short_title] = $post[short_title]."...";
}
else {
        $post[short_title] = $post[full_title];
}

$posted_on = date($datedisplay, $post[last_post]);
$today_date = date($datedisplay, time());

If ($posted_on == $today_date) {
        $datefield = "Сегодня";
        $datefield = $datefield . ", " . date($timedisplay, $post[last_post]);
}

elseif (date('d.m.Y',strtotime("-1 day")) == $posted_on) {
        $datefield = "Вчера";
        $datefield = $datefield . ", " . date($timedisplay, $post[last_post]);
}

else {
        $datefield = $posted_on;
}

echo
Вот только как теперь поправку к ним добавить?.. Я пытался приплюсовать, но у меня получилось почему-то только отображение текущего московского времени и всё...:confused:
 

alekciy

Новичок
Хм... Поробуй вместо этого:
$posted_on = date($datedisplay, $post[last_post]);
$today_date = date($datedisplay, time());

написать:
PHP:
$last = $post[last_post] + 28800;
$current_time = time() + 28800;
$posted_on = date($datedisplay, $last); 
$today_date = date($datedisplay, $current_time);
Хотя конечно хорошо бы узнать, что точно содержиться в $post[last_post].
 

Golden Grey

Guest
Спасибо! Сейчас попробую... :)

А $post[last_post] - это, как я догадываюсь - дата последнего поста на форуме, котрая вытаскивается из самого форума.
 

alekciy

Новичок
Я тоже так думаю. Ведь время может быть возращено в большом количестве форматов. К примеру в виде количества секунд прошедщих с 1900 года, или же кол-ва секунд прошедших со времени начала эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT).
Конечно в данном случае конечно тут второй вариант, но уточнить в любом случае стоит.
 

Golden Grey

Guest
Блин... а что-то не получается... :( Строки заменил, а всё равно - то же самое. И вроде сам понимаю, что всё верно, а нет - не идёт... :(

-~{}~ 20.03.06 19:28:

Ааа... Семён Семёныч! :) Кажется начинаю вникать - там не 2 строчки менять надо было по ходу, а ещё в нескольких местах поменять переменные - в тех местах где прописан сам вывод сообщений. Сейчас бум ковырять...

-~{}~ 20.03.06 19:35:

УРРРАААА!!!!!!!!! :) Заработало!!!! Блин, alekciy, ну спасибо! От всей души! Я в неоплатном долгу. :)

-~{}~ 22.03.06 02:51:

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

Проблема, как я понял, в этом куске кода:

PHP:
If ($posted_on == $today_date) {
        $datefield = "Сегодня";
        $datefield = $datefield . ", " . date($timedisplay, $last);
}

elseif (date('d.m.Y',strtotime("-1 day")) == $posted_on) {
        $datefield = "Вчера";
        $datefield = $datefield . ", " . date($timedisplay, $last);
}

else {
        $datefield = $posted_on;
}

echo
Не соображу только что же теперь может быть неправильно...

-~{}~ 22.03.06 02:55:

Вот в этой штуке - date('d.m.Y',strtotime("-1 day") по ходу дела дата тоже не увеличена на 28800. Так? Как бы это теперь исправить?..
 

ys

отодвинутый новичок
> Вот в этой штуке - date('d.m.Y',strtotime("-1 day") по ходу дела дата тоже не увеличена на 28800. Так? Как бы это теперь исправить?..

Увеличить? :)
 

alekciy

Новичок
Golden Grey
>Вот в этой штуке - date('d.m.Y',strtotime("-1 day") по ходу дела
>дата тоже не увеличена на 28800.
Именно. Ведь 8 часов, это как ни как треть суток. Вот и выходит, что скрипт беря время с сервера оперирует временем сервера, а часть измененого тобою сткрипта оперирует уже московским временем.
Кроме того такая ощибка по идее должна проявляться в течении нескольких суток, ведь в БД данные записаны по "старой" схеме (без подвода на м.в.).

Попробуй ПЕРЕД приведенном тобою куске кода дописать строку:

$now = time() + 28800;

А строку:

elseif (date('d.m.Y',strtotime("-1 day")) == $posted_on) {

замени на:

elseif (date('d.m.Y',strtotime("-1 day", $now)) == $posted_on) {
 

Golden Grey

Guest
Ok! Попробую. :) А там проблем с форматами дат не будет? Ведь $now - это юниксовый формат, а date - это уже "человеческий"...
 

alekciy

Новичок
$now это переменая. Все, что возращают функции это время в секундах. Только в одном случае это в время от 1900 года, в другом-от 1970 года. Так что пробуй, но думаю, все будет нормально.
Вскрытие покажет.
 

Golden Grey

Guest
Ну всё. Теперь вроде правильно отображается. Раньше глюк проявлялся ночью, когда как раз и получалась нестыковка из-за 8-часовой разницы (в России уже начинались новые сутки, а в США - ещё старые шли... :) ), теперь вот кажись всё верно.

Спасибо огромное за помощь!
 
Сверху