Полезная информация


----

Начать новую тему Ответить на тему
АвторСообщение

 Сообщение Показ возраста форума - "Форуму Х лет Х месяцев и Х дней" 
#1 

Аватар пользователя

Предлагаю сверх-лёгкое решение, которое высвечивает сообщение в формате "Форуму 3 года 11 месяцев и 5 дней" с соблюдением правильности русского языка.

Показ возраста - штука нелишняя для молодого форума, и вот почему: предположим кто-то забрёл на форум, на котором всего несколько сот или тысяч сообщений. Как можно понять эту информацию? Если форум старый, то очевидно, что он "не состоялся", бежать от такого подальше! Но если форум появился недавно, то солидное число сообщений ещё просто не успело накопиться - стОит поглядеть что это за тусовочка... Конечно, можно просто указать дату создания, но предлагаемое решение, по-моему, элегантней (уж прикольней - точно! :ps_ih: ).

Следующий фрагмент надо просто вставить в HTML в том месте, где хотите показывать возраст (Перед правкой поставить в выбранном шаблоне кодировку UTF-8 без BOOM иначе будут кракозябры):

<!-- Высветить "Форуму ... лет ... месяцев и ... дней" BEGIN -->
<SCRIPT language=JavaScript>
<!--
var fD = [2012, 7, 25], d1 = 6, m1 = 4, tx = [], rz, d = new Date,
tD = [d.getFullYear (), d.getMonth (), d.getDate ()], dr = tD [2] - fD [2],
mr = tD [1] - fD [1], yr = tD [0] - fD [0], Y = 'год-года-лет',
M = 'месяц-месяца-месяцев', D = 'день-дня-дней', t = function (v, w) {
var x = w.toString ().split (''), y = x [x.length - 1], z = 0; if (w > 4 && w < 21
|| y == 0) z = 2; else if (y > 1 && y < 5) z = 1; else if (y > 4) z = 2; return ' ' + v.split ('-') [z]}
if (dr < 0) dr = tD [2] + d1, mr--; if (yr > 0 && mr < 0) yr -= 1; if (mr < 0) mr = tD [1] + m1;
var yt = (yr) ? yr + t (Y, yr) : ''; if (yt) tx [tx.length] = yt;
var mt = (mr) ? mr + t (M, mr) : ''; if (mt) tx [tx.length] = mt;
var dt = (dr) ? dr + t (D, dr) : ''; if (dt) tx [tx.length] = dt;
if (tx.length == 1) rz = tx [0];
if (tx.length == 2) rz = tx.join (' и ');
if (tx.length == 3) rz = tx [0] + ', ' + tx [1] + ' и ' + tx [2];
document.write("Форуму <strong>" + rz + "</strong> (основан 25 авг 2012)");
-->
</SCRIPT>
<!-- Высветить "Форуму ... лет ... месяцев и ... дней" END -->
 

Даты замените на дату создания вашего форума (памятуя о том, что в джаваскрипте месяца нумеруются от 0 до 11 - именно поэтому у меня стоИт "7" для августа: "var fD = [2012, 7, 25]").

Наверно, джаваскрипт - не очень хорошее решение (калькуляцию лучше проводить на сервере, а не в браузере), но у меня этот скрипт только на морде форума, на которую форумчане в повседневной жизни обычно редко заходят.

Важный ремарк: автор кода - не я, мне его дали в готовом виде на форуме программистов (и автор разрешил опубликовать его здесь).



Теги темы
Показ возраста форума - "Форуму Х лет Х месяцев и Х дней"
          Вернуться наверх  
 

#2 

Аватар пользователя

Отлично, и модов не нужно))


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 

#3 

Аватар пользователя

Скрипт некорректно считает, допустим от 21 ноября 2009 года, тему в мусор скорее всего отправить придется


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 

#4 

Аватар пользователя

Ну так исправь чтоб было корректно, и человечество скажет спасибо! Функционал-то интереснейший.

Кстати, у меня вроде правильно работает:

Форуму 1 год и 26 дней (основан 25 авг 2012)

Но, возможно, ещё не наступила дата, когда скрипт заглючит.


          Вернуться наверх  
 

#5 

Аватар пользователя

Я в яве ноль, да и искать долго скрипт. Взял и поставил этот мод -
Пожалуйста Зарегистрируйтесь чтобы увидеть ссылку
. Пример работы - напротив подфорума I-Valll


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 

#6 

Аватар пользователя

DeaDRoMeO писал(а):

Пример работы - напротив подфорума I-Valll
Ничего не путаешь?


          Вернуться наверх  
 

#7 

Аватар пользователя

Чего мне путать то ???
Пожалуйста Зарегистрируйтесь чтобы увидеть ссылку


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 

#8 

Аватар пользователя

Не знаю чего, но путаешь. На всякий случай повторю о чём речь в этой теме:
ursego писал(а):

решение, которое высвечивает сообщение в формате "Форуму 3 года 11 месяцев и 5 дней" с соблюдением правильности русского языка
Решений, которые просто показывают сколько дней - уйма в интернете, у меня сначала такое стояло, но это "невкусно".


          Вернуться наверх  
 

#9 

Аватар пользователя

Теперь понял)


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

У меня всё подсчитывает верно! :-00):
ursego, Спасибо! :uch_tiv:

Скрытый текст. Необходимо Зарегистрироваться


          Вернуться наверх  
 


Аватар пользователя

Олег В писал(а):

ursego, Спасибо!
Пожалуйста от имени того программиста, который написал скрипт.

Олег В писал(а):

У меня всё подсчитывает верно!
Честно говоря, я не очень обольщаюсь - вполне возможно, что баг проявляется при определённой комбинации дня, месяца и года (до которой я ещё не дошёл). У меня раньше другой скрипт стоял - показывал нормально, а когда форуму исполнился год, то вместо "1 год" высветил "12 месяцев".

DeaDRoMeO писал(а):

Скрипт некорректно считает, допустим от 21 ноября 2009 года
А в чём конкретно косяк-то был? Какой возраст высветился?


          Вернуться наверх  
 


Аватар пользователя

ursego писал(а):

А в чём конкретно косяк-то был? Какой возраст высветился?
Вот что показывает если выставить дату DeaDRoMeO,
Форуму 3 года, 12 месяцев и 26 дней (основан 21 ноября 2009г)
 
Но 12 месяцев и 26 дней быть не может. должно быть так по моему
Форуму 4 года, 0 месяцев и 26 дней (основан 21 ноября 2009г)
 
но даже если не брать этот факт во внимание, всё равно подсчёт не верен. По итогу, правильно должно быть вроде так.
Форуму 3 года, 10 месяцев и 30 дней (основан 21 ноября 2009г)
 


          Вернуться наверх  
 


Аватар пользователя

как по мне, правда с меня ещё тот математик. Ошибку создаёт именно этот момент 12 месяцев и 26 дней. Вот этот 13-ты месяц и путает все вычисления!


          Вернуться наверх  
 


Аватар пользователя

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


          Вернуться наверх  
 


Аватар пользователя

ursego писал(а):

Ну, я когда дойду до проблем, тогда и буду думать как решить.

Думаю что Вашему знакомому эту проблему решить будет не сложно и в данный момент. Зачем ждать проблем то? Швейцарские часы не должны требовать доработок в будущем. Их вообще разбирать не рекомендуется! :ne_ne_ne:


          Вернуться наверх  
 


Аватар пользователя

В общем всё вроде заработало нормально.
Проблема с 13 -тым месяцем решается заменой. в строке
var fD = [2012, 7, 25], d1 = 6, m1 = 4, tx = [], rz, d = new Date,
 
заменить цифру 4 в m1 = на цифру 3.


          Вернуться наверх  
 


Аватар пользователя

Олег В писал(а):

заменить цифру 4 в m1 = на цифру 3.

Вот если бы получить код с комментариями, тогда проще было б, а так фиг поймешь за что отвечает какая то переменная


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

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


          Вернуться наверх  
 


Аватар пользователя

Спасибо за простой скрипт. Удобно.


_________________
Подпись:
три головы - это хорошо. но как же трудно придти к согласию...
* белк может помочь, но ставить за кого-то моды не будет... ни платно, ни бесплатно. *
          Вернуться наверх  
 


Аватар пользователя

Короче, задолбала меня глючность предыдущего скрипта (приходилось что-то менять 2 раза в месяц чтоб правильно показывал - то туда, то обратно) и я нашёл другой скрипт. Правда, он был англоязычный, ну а уж я русифицировал его как смог (начиная с объявления переменной res - это уже моя самодеятельность). В общем, ниже выкладываю готовый кусок джаваскрипта. Только не забудьте инициализировать переменные yearDob, monthDob и dateDob датой создания Вашего форума (не забывая, что индекс месяца, помещаемый в monthDob, на единицу меньше его порядкового номера т.к. в джаваскрипте месяца нумеруются с нуля - например, я помещаю туда 7, что значит "август"; на года и дни это не распространяется - я помещаю 2012 для 2012-го года и 25 для 25-го числа).

Правда, имеется баг - now.getYear() почему-то возвращает неправильный текущий год, так что я заполняю переменную yearNow просто числом 2014 (как исправлю - отпишусь).

<!-- Высветить "Форуму ... лет ... месяцев и ... дней" BEGIN -->
<SCRIPT language=JavaScript>
<!--
  var now = new Date();
  var today = new Date(now.getYear(),now.getMonth(),now.getDate());
 
  var yearNow = 2014; //now.getYear();
  var monthNow = now.getMonth();
  var dateNow = now.getDate();
 
  var yearDob = 2012;
  var monthDob = 7;
  var dateDob = 25;
  var age = {};
 
  yearAge = yearNow - yearDob;
 
  if (monthNow >= monthDob)
    var monthAge = monthNow - monthDob;
  else {
    yearAge--;
    var monthAge = 12 + monthNow -monthDob;
  }

  if (dateNow >= dateDob)
    var dateAge = dateNow - dateDob;
  else {
    monthAge--;
    var dateAge = 31 + dateNow - dateDob;
 
    if (monthAge < 0) {
      monthAge = 11;
      yearAge--;
    }
  }

  age = {
      years: yearAge,
      months: monthAge,
      days: dateAge
      };

var res = "Форуму "; // result

if (age.years == 1)
   res += "<strong>1</strong> год";
else if (age.years > 1 && age.years < 5)
   res += "<strong>" + age.years + "</strong> года";
else if (age.years >= 5)
   res += "<strong>" + age.years + "</strong> лет";

if (age.days == 0)
   res += " и ";
else
   res += ", ";

if (age.months == 1)
   res += "<strong>1</strong> месяц";
else if (age.months > 1 && age.months < 5)
   res += "<strong>" + age.months + "</strong> месяца";
else if (age.months >= 5)
   res += "<strong>" + age.months + "</strong> месяцев";

if ((age.years > 0 || age.months > 0) && age.days > 0)
   res += " и ";

if (age.days == 1 || age.days == 21)
   res += "<strong>" + age.days + "</strong> день";
else if (age.days == 2 || age.days == 3 || age.days == 4 || age.days == 22 || age.days == 23 || age.days == 24)
   res += "<strong>" + age.days + "</strong> дня";
else if (age.days >= 5)
   res += "<strong>" + age.days + "</strong> дней";

document.write(res);
-->
</SCRIPT>
<!-- Высветить "Форуму ... лет ... месяцев и ... дней" END -->
 


          Вернуться наверх  
 
 
Начать новую тему Ответить на тему


Дополнительные возможности

  Похожие темы  Автор  Ответов  Просмотров  Последнее сообщение 
Аватар пользователя Показ рекламы на форуме
Пару слов о рекламе, размещенной на форуме
Тема закрыта
Аватар пользователя Прикрутить сайт к форуму

ZmejNK

15

643

Аватар пользователя

23 ноя 2013, 16:44

bvp

Аватар пользователя нашему форуму 3 месяца =)) Тема закрыта
Аватар пользователя нашему форуму 2 месяца=)) Тема закрыта
Аватар пользователя нашему форуму месяц=))) Тема закрыта

Оставить свой комментарий

Поделиться темой с помощью

Ссылки на тему

Прямая ссылка:
BB-код для форумов, сайтов, блогов:
HTML ссылка:
 


cron

Самая неформальная поддержка phpBB :P