Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Находим ЧАС ПОЯС !


Автор: D I M K A 1.3.2005, 01:18
Здравствуйте, я написал счётчик . Он выводит дату когда юзера заходили на мою пагу . Но прикол в том, что сайт в интернациональной зоне, а время счетчик показывать будет то , которое у него установлено на компе , т.е. получается полный беспредел !

Как мне вывести рядом с датой часовой пояс пользователя ? Например 00:17:13 | GMT: +04 : 00 ??!!

Автор: BIG BROTHER 1.3.2005, 10:31
пользовательский часовой пояс можно поределить с помощю javascript
напрмер так
Код

<script>
Date = new Date();
document.write( "Seconds above eridian: " + Date.getTimezoneOffset() + "<br>" );
document.write( "Time Zone (GMT): " + ( Date.getTimezoneOffset() / 60 ) *  ( -1 ) + "<br>" );
</script>

Автор: Mal Hack 1.3.2005, 15:26
Если у пользователей есть авторзованная зона и они мотгут сохранить свой часовой пояс, как на этом форуме в профиле, то можно вывести смещение так:
Код
<?php

print date( "j.m.Y H:i:s" , time() ) . "<br>"; // Время сервера

$needle = 3;  // Нужный нам часовой пояс
$tm = ( date( "Z" ) / 60 / 60 ); // Смещение часового пояса сервера относительно GMT
$sm = ( $needle * 3600 ) - date( "Z" ); // Смещение на нужный часовой пояс

print date( "j.m.Y H:i:s" , time() + $sm ); // Время, со смещением на наш часовой пояс

?>


BIG BROTHER
Даже боюсь загадывать, откуда код взял smile

Автор: D I M K A 2.3.2005, 00:43
ява не катит ;)
вот весь код счетчика :

<?php
// Our log file;
$counter = "counter.txt";

// Date logging;
$today = getdate();
$month = $today[month];
$mday = $today[mday];
$year = $today[year];
$time= date("H:i:s");
$current_date = $mday . $month . $year . $time ;

// Log visit;
$fp = fopen($counter, "a");
$line = $REMOTE_ADDR . "|" . $mday . $month . $year . $time . "\n";
$size = strlen($line);
fputs($fp, $line, $size);
fclose($fp);

// Read log file into array;
$contents = file($counter);

// Total hits;
$total_hits = sizeof($contents);

// Total hosts;
$total_hosts = array();
for ($i=0;$i<sizeof($contents);$i++) {
$entry = explode("|", $contents[$i]);
array_push($total_hosts, $entry[0]);
}
$total_hosts_size = sizeof(array_unique($total_hosts));

// Daily hits;
$daily_hits = array();
for ($i=0;$i<sizeof($contents);$i++) {
$entry = explode("|", $contents[$i]);
if ($current_date == chop($entry[1])) {
array_push($daily_hits, $entry[0]);
}
}
$daily_hits_size = sizeof($daily_hits);

// Daily hosts;
$daily_hosts = array();
for ($i=0;$i<sizeof($contents);$i++) {
$entry = explode("|", $contents[$i]);
if ($current_date == chop($entry[1])) {
array_push($daily_hosts, $entry[0]);
}
}
$daily_hosts_size = sizeof(array_unique($daily_hosts));

// Let's display everything;
echo "Total hits: " . $total_hits . "<br>Total hosts: " . $total_hosts_size . "<br>Daily hits: " . $daily_hits_size . "<br>Daily hosts: " . $daily_hosts_size;
?>

Отак , а как дописавать час пояс ? ... Без всякой авторизации и выставлений . Счетчика по ходу даже и не видно на паге . В *тхт файлике даты всех посещения и мне надо туда добавить час. пояс ...
Так как 04:04:04 в Аргентине и в Киеве имеют разный часовой смысл ;) ...

Автор: D I M K A 2.3.2005, 00:49
еще одно( в разделе "для начинаю" нет даже начин. наверно) , от :

Дело в том, что в этот скрипт я добавил переменную $time . Вставил ее дляотображения ... но баг!
Работа самого скрипта заключается в отображении 4-ьох строк , вот они Total hits: 158
---------------------------------
Total hits: 1
Total hosts: 1
Daily hits: 1
Daily hosts: 1
-----------------------
И вот как только я добавил переменную $date -> сразу показатели Daily hits: 1 и Total hits: 1 и при мгновенном обновлении страницы начали искажатся ! Причем показатель Total hits: 1 как и прежне показует при каждом обновлении на 1-у цыфпру больше , т.е. работает правильно, зато Daily hits: 1 начал прибавлять, а потом (при еще одном обновлении) отнимать цыфру 1 ! В чем заґвоздка ? Что нужно исправить ? :

(ИСХОДНИК ТОТ ЖЕ)

Автор: ТАК ? ... 5.3.2005, 01:22
Так на рнр часовой пояс не находится ?

Автор: Mal Hack 5.3.2005, 13:28
Цитата
Так на рнр часовой пояс не находится ?

Посмотри внимательно мой пост...
Цитата(Mal @ 1.3.2005, 15:26)
date( "Z" ) / 60 / 60

И будет часовой пояс.

Автор: D 5.3.2005, 14:34
Mal Hack, стой, стоп ...
давай разьясним с каждой строкой ...
1. открываем код РНР ( <?php )
2. выводим время не сервере ( print date( "j.m.Y H:i:s" , time() ) . "<br>"; // Время сервера )
3. (тут сомнения) обьявляем что нам нужна переменная с запросом 3 , котороя есть хар-икой 3-ього час. пояса ( $needle = 3; // Нужный нам часовой пояс )
4. что значит _ date( "Z" ) / 60 / 60 _ ? ( $tm = ( date( "Z" ) / 60 / 60 ); // Смещение часового пояса сервера относительно GMT )
5. Почему мы 3 множ. на 3600 ? И что такое Z ? ( $sm = ( $needle * 3600 ) - date( "Z" ); // Смещение на нужный часовой пояс )
6. выводим дату со смещением вправо . А если нужно отнимать ? ( print date( "j.m.Y H:i:s" , time() + $sm ); // Время, со смещением на наш часовой пояс )

Самое главное. Как вставить опред. час. пояса в код счетчика :

<?php
// Our log file;
$counter = "counter.txt";

// Date logging;
$today = getdate();
$month = $today[month];
$mday = $today[mday];
$year = $today[year];
$time= date("H:i:s");
$current_date = $mday . $month . $year . $time ;

// Log visit;
$fp = fopen($counter, "a");
$line = $REMOTE_ADDR . "|" . $mday . $month . $year . $time . "\n";
...
(Полный код написан сверху)

Автор: D 5.3.2005, 14:35
Mal Hack, стой, стоп ...
давай разьясним с каждой строкой ...
1. открываем код РНР ( <?php )
2. выводим время не сервере ( print date( "j.m.Y H:i:s" , time() ) . "<br>"; // Время сервера )
3. (тут сомнения) обьявляем что нам нужна переменная с запросом 3 , котороя есть хар-икой 3-ього час. пояса ( $needle = 3; // Нужный нам часовой пояс )
4. что значит _ date( "Z" ) / 60 / 60 _ ? ( $tm = ( date( "Z" ) / 60 / 60 ); // Смещение часового пояса сервера относительно GMT )
5. Почему мы 3 множ. на 3600 ? И что такое Z ? ( $sm = ( $needle * 3600 ) - date( "Z" ); // Смещение на нужный часовой пояс )
6. выводим дату со смещением вправо . А если нужно отнимать ? ( print date( "j.m.Y H:i:s" , time() + $sm ); // Время, со смещением на наш часовой пояс )

Самое главное. Как вставить опред. час. пояса в код счетчика :

<?php
// Our log file;
$counter = "counter.txt";

// Date logging;
$today = getdate();
$month = $today[month];
$mday = $today[mday];
$year = $today[year];
$time= date("H:i:s");
$current_date = $mday . $month . $year . $time ;

// Log visit;
$fp = fopen($counter, "a");
$line = $REMOTE_ADDR . "|" . $mday . $month . $year . $time . "\n";
...
(Полный код написан сверху)

Автор: Mal Hack 5.3.2005, 14:37
Цитата
Как вставить опред. час. пояса в код счетчика

Прибавить к переменной с часами. Только надо пропускать через mktime или самому смотреть чтобы не получилось 26 или -3 часа.

Автор: D 7.3.2005, 16:03
http:// forum.europeanservers.us/cgi-bin/se.eur?80692
гля, тут так и сделано, типа GMT +3 !
ЯваСкрипт ни причем , он всегда у меня отключен .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)