Today At/Yesterday At

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
quazi
phpBB 2.0.2
Сообщения: 306
Зарегистрирован: 15.03.2005 18:49
Контактная информация:

Сообщение quazi » 18.07.2005 10:14

выдержка из мода

Код: Выделить всё

#
#----[ FIND ]-------
#
$s_last_visit = ( $userdata['session_logged_in'] ) ? create_date($board_config['default_dateformat'], $userdata['user_lastvisit'], $board_config['board_timezone']) : '';


#
#----[ REPLACE WITH ]----
#
$s_last_visit = ( $userdata['session_logged_in'] ) ? create_date($board_config['default_dateformat'], $userdata['user_lastvisit'], $board_config['board_timezone'], true) : '';
фактически добавляется один параметр.
думаю проблема в настройках временной зоны форума и пользователей

при корректной установке времени - все нормально

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 18.07.2005 12:26

quazi писал(а):думаю проблема в настройках временной зоны форума и пользователей
Тогда скажите как оно должно быть выставленно? На форуме дефолтом стоит +3 у меня в профиле +3.

Сегодня ночью опять проверю. Скорее всего действительно я туплю. Вы то отоспались за выходные, а я нет :wink:

Добавлено спустя 1 минуту 37 секунд:

Я вроде бы сравнивал со временем на форуме которое отображаеться, но я проверю. Заранее прошу прощения, если это мой глюк.
я люблю daft punk | новый sugoi.ru

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 19.07.2005 0:52

Не бага есть, вот смотрите: я вышел, зашел, в профиле стоит GMT+1, на главной написано
Вы последний раз заходили Вчера 21:33
Текущее время Пн 18 Июл 2005 21:37
Но я был 4 минуты назад. этот глюк происходит в период с 00:00 до 01:00 по Москве.

Добавлено спустя 1 минуту 2 секунды:

Если поставлю GMT+4 то нормально
Вы последний раз заходили Сегодня 00:33
Текущее время Вт 19 Июл 2005 00:45
Добавлено спустя 45 секунд:

И в плюс тоже нормально вроде бы.

Добавлено спустя 1 минуту 52 секунды:

В админке стоит GMT+3

Добавлено спустя 1 минуту 48 секунд:

Если ставлю в админке GMT+4 и у себя в профиле GMT+4, то нормально. Если ставлю себе в профиле GMT+3 то тот же эффект
Вы последний раз заходили Вчера 23:33
Текущее время Пн 18 Июл 2005 23:48
Добавлено спустя 1 минуту 14 секунд:

Такое ощущение, что он сам знает время которое реально есть в этом месте земли сейчас и на основе этого считает "вчера/сегодня".
я люблю daft punk | новый sugoi.ru

quazi
phpBB 2.0.2
Сообщения: 306
Зарегистрирован: 15.03.2005 18:49
Контактная информация:

Сообщение quazi » 19.07.2005 8:13

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

при этом выставьте свой часовой пояс (с учетом летнего времени)
он покажет, что вы заходили вчера

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 19.07.2005 8:59

quazi
Как это всё нормально? Ведь как бы полностью улетела в тартарары поправка на GMT.
quazi писал(а):при этом выставьте свой часовой пояс (с учетом летнего времени)
Ну а откуда он знает какой у меня часовой пояс? А может я живу в GMT+1, зачем он лезет со своим что у меня должно быть GMT+4? Или я живу на экваторе, там географически нет летнего и зимнего времени, в день и ночь ровно по 12 часов, а он мне будет переставляться в июне, июле, августе и что-там ещё на час вперед? По вашему нормально, если у меня стоит GMT+1, а он считает по GMT+4?
VVVas писал(а):Вы последний раз заходили Вчера 21:33
Текущее время Пн 18 Июл 2005 21:37
Ведь именно это он и сделал.

Чем меньше GMT тем более заметен баг, как я написал при GMT+1 баг будет замечен между 9 и 10 вечера по их времени по лету. Это сейчас у меня пользователи спокойны, потому что в это времяих нет на форуме, а в GMT+1 этот глюк пойдет, как я и сказал, между 9 и 10 вечера, тогда народу ещё полно может быть на форуме и там эту багу сразу заметят.

PS Это же всё равно что нажимать на кнопку А и получать на экране О, потому что оно считает что так правильней, а может это пример того как не надо.

Добавлено спустя 9 минут 27 секунд:

ИМХО, проблема в том что проверка на вчера сегодня производиться не везде в абсолютных/переменных величинах. То есть должно быть (абсолют - абсолют)поправка на GMT или абсолют_поправка на GMT - абсолют_поправка на GMT, а в моде происходит что-то типа абсолют_поправка на GMT - абсолют. То есть мы сравниваем значения которые принципиально не могут сравниваться, потому что они разных классов. Это всё про логику, а не про код. По крайней мере по внешним факторам ощущение такое.
я люблю daft punk | новый sugoi.ru

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 20.07.2005 0:25

Вот опять сегодня
Вы последний раз заходили Вчера 22:17
Текущее время Вт 19 Июл 2005 23:22
Но это я не вчера заходил последний раз, а час назад.
я люблю daft punk | новый sugoi.ru

Гость

Сообщение Гость » 24.07.2005 16:23

Люди, хелп. Календарь офанарел!

Код: Выделить всё

Warning: checkdate() expects parameter 1 to be long, string given in /home/users/o/owil/docs/forum/cal_lite.php on line 187
Так же не понятно как понимать это:

Код: Выделить всё

Декабрь Сегодня в 16:24

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 04.08.2005 1:45

Сейчас посмотрел 5 модов такой же функциональности и основанные на модификации function create_date - у всех у них та же беда, что и тут. У кого-то код больше по размеру, кто-то фишек воткнул дополнительных, но эта бага есть. Каждый из них вот поставил и посмотрел. Та же бага.
Так что тот кто придумает как её победить будет немеренно крут, ИМХО.

Добавлено спустя 10 минут 25 секунд:

Вот сейчас уже трусы снял, спать пойду, пришла такая мысля: ведь для решения этой проблемы нужно всего лишь прибавлять к функции вычисления "вчера или сегодня или не меняем" ко всем трем моментам при выводе абсолютную разницу между 'локальной географической поправкой сервера' (то которое собственно нам и гадит) и 'поправкой заданой в профиле у пользователя/в конфигурации phpBB для гостей'. И всё. Вроде как должно жить. Программеры - теперь дело за вами, я php не знаю.

Добавлено спустя 13 минут 5 секунд:

И если уж пошла такая пьянка можно для этих дат не задавать жестко часы:минуты

Код: Выделить всё

gmdate('H:i', $time);
А использовать значения из профиля у пользователя/из конфигурации phpBB для гостей?
я люблю daft punk | новый sugoi.ru

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 04.08.2005 10:12

Туплю - это те же яйца только в профиль что я и выше написал.
я люблю daft punk | новый sugoi.ru

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 05.08.2005 21:50

Ну и на добавку, бага видимо связаная с той же причиной. Для проверки поставил себе GMT +8 и имею
Текущее время Сб 06 Авг 2005 01:47
а время поста, который сделан сегодня, но раньше на 6 часов
Сегодня 20:41
И ещё более прикольно, только что сделанный пост
Сб 06 Авг 2005 01:35
я люблю daft punk | новый sugoi.ru

Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Зарегистрирован: 09.05.2005 16:06
Откуда: Архангельск
Контактная информация:

Сообщение Гога » 22.08.2005 21:29

Правильно говорят, надо всего-то одну функцию поменять и будет вам счастье, где хотите. Вот мой вариант, причём на главной странице нормальное время показывающий и время коверкающий, только если запрошен стандартный формат ($board_config['default_dateformat']).
Источник вдохновления:
##############################################################
## MOD Title: Today At/Yesterday At
## MOD Author: netclectic < adrian@netclectic.com > (Adrian Cockburn) http://www.netclectic.com
## MOD Description: Will show Today At if the post was posted today
## Will show Yesterday At if the post was posted yesterday
##
## MOD Version: 1.3.1

Код: Выделить всё

Index: language/lang_russian/lang_main.php
===================================================================
--- language/lang_russian/lang_main.php (revision 166)
+++ language/lang_russian/lang_main.php (working copy)
@@ -1070,6 +1070,9 @@
 $lang['Album'] = 'Альбом';
 $lang['Personal_Gallery_Of_User'] = 'Персональная галерея пользователя %s';

+$lang['Today_at'] = '<b>Сегодня</b> в';
+$lang['Yesterday_at'] = '<b>Вчера</b> в';
+
 //
 // That's all Folks!
 // -------------------------------------------------
Index: includes/page_header.php
===================================================================
--- includes/page_header.php    (revision 166)
+++ includes/page_header.php    (working copy)
@@ -368,7 +368,7 @@
        'SITE_DESCRIPTION' => $board_config['site_desc'],
        'PAGE_TITLE' => $page_title,
        'LAST_VISIT_DATE' => sprintf($lang['You_last_visit'], $s_last_visit),
-       'CURRENT_TIME' => sprintf($lang['Current_time'], create_date($board_config['default_dateformat'], time(), $board_config['board_timezone'])),
+       'CURRENT_TIME' => sprintf($lang['Current_time'], create_date_simple($board_config['default_dateformat'], time(), $board_config['board_timezone'])),
        'TOTAL_USERS_ONLINE' => $l_online_users,
        'LOGGED_IN_USER_LIST' => $online_userlist,
        'RECORD_USERS' => sprintf($lang['Record_online_users'], $board_config['record_online_users'], create_date($board_config['default_dateformat'], $board_config['record_online_date'], $board_config['board_timezone'])),
Index: includes/functions.php
===================================================================
--- includes/functions.php      (revision 166)
+++ includes/functions.php      (working copy)
@@ -392,7 +392,7 @@
 //
 // Create date/time from format and timezone
 //
-function create_date($format, $gmepoch, $tz)
+function create_date_simple($format, $gmepoch, $tz)
 {
        global $board_config, $lang;
        static $translate;
@@ -410,6 +410,33 @@
 }

 //
+// Create date/time from format and timezone
+//
+function create_date($format, $gmepoch, $tz)
+{
+       global $board_config, $lang;
+
+       if ( $board_config['default_dateformat'] === $format )
+       {
+               $today_ary = explode('|', create_date_simple('m|d|Y', time(), $tz));
+               $board_config['time_today'] = gmmktime(0 - $tz - $board_config['dstime'], 0, 0, $today_ary[0], $today_ary[1], $today_ary[2]);
+               $board_config['time_yesterday'] = $board_config['time_today'] - 86400;
+               unset($today_ary);
+               if ( $board_config['time_today'] < $gmepoch )
+               {
+                       return $lang['Today_at'] . ' ' . create_date_simple($board_config['default_timeformat'],  $gmepoch, $tz);
+               }
+               else if ( $board_config['time_yesterday'] < $gmepoch)
+               {
+                       return $lang['Yesterday_at'] . ' ' . create_date_simple($board_config['default_timeformat'],  $gmepoch, $tz);
+               }
+       }
+
+       return create_date_simple($format, $gmepoch, $tz);
+
+}
+
+//
 // Pagination routine, generates
 // page number sequence
 //
Index: common.php
===================================================================
--- common.php  (revision 166)
+++ common.php  (working copy)
@@ -224,6 +224,12 @@
        $board_config[$row['config_name']] = $row['config_value'];
 }

+$time_reg = '([gh][[:punct:][:space:]]{1,2}[i][[:punct:][:space:]]{0,2}[a]?[[:punct:][:space:]]{0,2}[s]?)';
+eregi($time_reg, $board_config['default_dateformat'], $regs);
+$board_config['default_timeformat'] = $regs[1];
+unset($time_reg);
+unset($regs);
+
 include($phpbb_root_path . 'attach_mod/attachment_mod.'.$phpEx);

 if (file_exists('install') || file_exists('contrib'))
Добавлено спустя 1 час 23 минуты 12 секунд:

Меня только смущает вот это. А если я захочу i:H ? :)

Код: Выделить всё

$time_reg = '([gh][[:punct:][:space:]]{1,2}[i][[:punct:][:space:]]{0,2}[a]?[[:punct:][:space:]]{0,2}[s]?)';
Добавлено спустя 11 минут 35 секунд:

А чтоб настройки юзверя учитывались, то ещё и так:

Код: Выделить всё

--- includes/functions.php      (revision 167)
+++ includes/functions.php      (working copy)
@@ -262,6 +262,11 @@
                if ( !empty($userdata['user_dateformat']) )
                {
                        $board_config['default_dateformat'] = $userdata['user_dateformat'];
+                       $time_reg = '([gh][[:punct:][:space:]]{1,2}[i][[:punct:][:space:]]{0,2}[a]?[[:punct:][:space:]]{0,2}[s]?)';
+                       eregi($time_reg, $board_config['default_dateformat'], $regs);
+                       $board_config['default_timeformat'] = $regs[1];
+                       unset($time_reg);
+                       unset($regs);
                }

                if ( isset($userdata['user_timezone']) )
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.

Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Зарегистрирован: 09.05.2005 16:06
Откуда: Архангельск
Контактная информация:

Сообщение Гога » 25.08.2005 13:34

http://www.pomorsu.ru/forum/mods/Univer ... rdayAt.txt

Код: Выделить всё

##############################################################
## MOD Title: Universal TodayAt/YesterdayAt Mod
## MOD Author: Goga < pashev dot igor at pomorsu dot ru > (Igor Pashev) n/a
## MOD Description: Will show Today At if the date is today,
##                  will show Yesterday At if the date is yesterday
##                  for any date on the forum.
## MOD Version: 0.1.1
## Installation Level: Easy
## Installation Time: 1 Minute
## Files To Edit:
##               includes/functions.php,
##               includes/page_header.php,
##               common.php,
##               language/lang_english/lang_main.php
## Included Files: n/a
## License: http://opensource.org/licenses/gpl-license.php GNU Public License v2
##############################################################
## For Security Purposes, Please Check: http://www.phpbbguru.net/mods/ for the
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
## to enter into your phpBB Forum.
##############################################################
## Author Notes:
## The main purpose for this Mod is to make all dates pretty formatted.
## As a result this Mod introduces two global variables:
## $board_config['time_today'] and $board_config['time_yesterday']
## which may be used for statistical analysises. Such a thing
## is shown as an example of number of Posts Since Midnight.
##
##############################################################
## MOD History:
##
##   2005-08-26 - Version 0.1.1
##      - Timezone fix
##
##   2005-08-25 - Version 0.1.0
##      - The first public release
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################

#
#-----[ OPEN ]------------------------------------------
#
includes/functions.php

#
#-----[ FIND ]------------------------------------------
#
	if ( !empty($userdata['user_dateformat']) )
	{
		$board_config['default_dateformat'] = $userdata['user_dateformat'];

#
#-----[ AFTER, ADD ]------------------------------------------
#
		$board_config['default_timeformat'] = get_time_format();

#
#-----[ FIND ]------------------------------------------
#
	if ( isset($userdata['user_timezone']) )
	{
		$board_config['board_timezone'] = $userdata['user_timezone'];

#
#-----[ AFTER, ADD ]------------------------------------------
#
		$board_config['time_today'] = get_time_moment('today');
		$board_config['time_yesterday'] = $board_config['time_today'] - 86400;

#
#-----[ FIND ]------------------------------------------
#
function create_date($format, $gmepoch, $tz)

#
#-----[ REPLACE WITH ]------------------------------------------
#
function create_date_simple($format, $gmepoch, $tz)

#
#-----[ FIND ]------------------------------------------
#
// Pagination routine, generates
// page number sequence
//

#
#-----[ BEFORE, ADD ]------------------------------------------
#
//
// Create pretty date/time from format and timezone
//
function create_date($format, $gmepoch, $tz)
{
	global $board_config, $lang;

	if ( $board_config['default_dateformat'] === $format )
	{
		if ( $board_config['time_today'] < $gmepoch + (3600*$tz) )
		{
			return sprintf($lang['Today_at'], create_date_simple($board_config['default_timeformat'],  $gmepoch, $tz));
		}

		if ( $board_config['time_yesterday'] < $gmepoch + (3600*$tz) )
		{
			return sprintf($lang['Yesterday_at'], create_date_simple($board_config['default_timeformat'],  $gmepoch, $tz));
		}
	}

	return create_date_simple($format, $gmepoch, $tz);

}


#
#-----[ FIND ]------------------------------------------
#
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
function get_time_format ($dateformat=0)
{
	global $board_config;
	if ($dateformat === 0)
	{
		$dateformat = $board_config['default_dateformat'];
	}
	// FIXME for curious cases
	$time_reg = '([gh][[:punct:][:space:]]{1,2}[i][[:punct:][:space:]]{0,2}[a]?[[:punct:][:space:]]{0,2}[s]?)';
	eregi($time_reg, $dateformat, $regs);
	return $regs[1];
}

function get_time_moment ($mode='today')
{
	global $board_config;
	switch ($mode)
	{
		case 'today':
		default:
			return 86400*floor((time()+(3600*$board_config['board_timezone']))/86400.0);
	}
}


#
#-----[ OPEN ]------------------------------------------
#
includes/page_header.php

#
#-----[ FIND ]------------------------------------------
#
	'CURRENT_TIME' => sprintf($lang['Current_time'], create_date($board_config['default_dateformat'], time(), $board_config['board_timezone'])),

#
#-----[ REPLACE WITH ]------------------------------------------
#
	'CURRENT_TIME' => sprintf($lang['Current_time'], create_date_simple($board_config['default_dateformat'], time(), $board_config['board_timezone'])),

#
#-----[ OPEN ]------------------------------------------
#
common.php

#
#-----[ FIND ]------------------------------------------
#
while ( $row = $db->sql_fetchrow($result) )
{
	$board_config[$row['config_name']] = $row['config_value'];
}

#
#-----[ AFTER, ADD ]------------------------------------------
#
$board_config['default_timeformat'] = get_time_format();
$board_config['time_today'] = get_time_moment('today');
$board_config['time_yesterday'] = $board_config['time_today'] - 86400;


#
#-----[ OPEN ]------------------------------------------
#
language/lang_english/lang_main.php

#
#-----[ FIND ]------------------------------------------
#
//
// That's all Folks!
// -------------------------------------------------

?>
#
#-----[ BEFORE, ADD ]------------------------------------------
#
$lang['Today_at'] = '<b>Today</b> at %s';
$lang['Yesterday_at'] = '<b>Yesterday</b> at %s';

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Последний раз редактировалось Гога 27.08.2005 0:46, всего редактировалось 6 раз.
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 26.08.2005 0:08

Гога
У меня всё работает. Всё хорошо. Часовые пояса погонял туда обратно последнего описанного мной бага не обнаружил. Надеюсь что и не обнаружу. По крайней мере пока ничего плохого не вижу.
Ночью посмотрю гуляние вчера/сегодня на час вперед/назад.

Добавлено спустя 4 часа 23 минуты 44 секунды:

А бага то - вот она.

Стоит в профиле GMT+4
В конфигурации GMT+3
Наступил новый день. Реальное время 00:05 26 августа. Ответы написанные вчера светяться "сегодня".
Вы последний раз заходили Сегодня 00:01
Текущее время Пт 26 Авг 2005 00:05
Cyprida
Сегодня 22:52
От Cyprida. Творчество
Предполагаю что это продлится до 01:00.

Желающие поэксперементировать test/test
я люблю daft punk | новый sugoi.ru

Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Зарегистрирован: 09.05.2005 16:06
Откуда: Архангельск
Контактная информация:

Сообщение Гога » 26.08.2005 0:18

Код: Выделить всё

Вчера,
epoch: 1124827515
epoch+tz: 1124841915
today:1124928000
yester: 1124841600
24.08.2005 Ср, 00:05
Щаз тыковку почешу......
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.

Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Зарегистрирован: 12.11.2004 0:20
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas » 26.08.2005 0:22

Или может у меня индивидуальная несовместимость с этими модами? Проверьте по себе, пожалуйста. Хостинг физически расположен в Москве, если это имеет значение.
я люблю daft punk | новый sugoi.ru

Закрыто

Вернуться в «Бета-версии модов для phpBB 2.0.x»