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

Скрипт можно установить как дополнение к уже существующему полю "Зарегистрирован: ...", либо как замену.

Установка крайне проста.
Для prosilver и его клонов. Открываете шаблон viewtopic_body.html, находите:

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

<!-- IF postrow.POSTER_POSTS != '' --><dd><strong>{L_POSTS}:</strong> {postrow.POSTER_POSTS}</dd><!-- ENDIF -->
Добавляете после, либо меняете на:

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

<!-- IF postrow.POSTER_POSTS != '' -->
<dd>
<script type="text/javascript">
p_j = '{postrow.POSTER_JOINED}';
ms='янвфевмарапрмайиюниюлавгсеноктноядек';
d = p_j.substr(0,2)*1;
m = ms.indexOf(p_j.substr(3,3))/3;
y = p_j.substr(7,4)*1;
d0 = new Date(y,m,d);
d1 = new Date();
dt = (d1.getTime() - d0.getTime()) / (1000*60*60*24);
cDay = Math.floor(dt);
cMon = "0";
cNear = "0";
tDay = " дней ";
tMon = " месяцев ";
tNear = " лет ";
if (cDay >= 30) cMon = Math.floor(cDay/30.4375);
if (cDay >= 365) cNear = Math.floor(cMon/12);
cDay = cDay-Math.floor(cMon*30.4375);
cMon = cMon-(cNear*12);
if (cDay >=2 && cDay <=4 || cDay >=22 && cDay <=24) tDay = " дня ";
if (cDay ==1 || cDay ==21 || cDay ==31) tDay = " день ";
if (cMon >=2 && cMon <=4) tMon = " месяца ";
if (cMon ==1) tMon = " месяц ";
if (cNear >=2 && cNear <=4 || cNear >=22 && cNear <=24) tNear = " года ";
if (cNear ==1 || cNear ==21 || cNear ==31) tNear = " год ";
document.write('<strong>На форуме:</strong> ');
if (cMon<1 && cNear<1) document.write(cDay+tDay);
else if (cMon>=1 && cNear<1) document.write(cMon+tMon+cDay+tDay);
else document.write(cNear+tNear+cMon+tMon+cDay+tDay);
</script>
</dd>
<!-- ENDIF -->


Для subsilver2 и его клонов. Открываете шаблон viewtopic_body.html, находите:

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

<!-- IF postrow.POSTER_JOINED --><br /><b>{L_JOINED}:</b> {postrow.POSTER_JOINED}<!-- ENDIF -->
Добавляете после, либо меняете на:

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

<!-- IF postrow.POSTER_JOINED -->
<script type="text/javascript">
p_j = '{postrow.POSTER_JOINED}';
ms='янвфевмарапрмайиюниюлавгсеноктноядек';
d = p_j.substr(0,2)*1;
m = ms.indexOf(p_j.substr(3,3))/3;
y = p_j.substr(7,4)*1;
d0 = new Date(y,m,d);
d1 = new Date();
dt = (d1.getTime() - d0.getTime()) / (1000*60*60*24);
cDay = Math.floor(dt);
cMon = "0";
cNear = "0";
tDay = " дней ";
tMon = " месяцев ";
tNear = " лет ";
if (cDay >= 30) cMon = Math.floor(cDay/30.4375);
if (cDay >= 365) cNear = Math.floor(cMon/12);
cDay = cDay-Math.floor(cMon*30.4375);
cMon = cMon-(cNear*12);
if (cDay >=2 && cDay <=4 || cDay >=22 && cDay <=24) tDay = " дня ";
if (cDay ==1 || cDay ==21 || cDay ==31) tDay = " день ";
if (cMon >=2 && cMon <=4) tMon = " месяца ";
if (cMon ==1) tMon = " месяц ";
if (cNear >=2 && cNear <=4 || cNear >=22 && cNear <=24) tNear = " года ";
if (cNear ==1 || cNear ==21 || cNear ==31) tNear = " год ";
document.write('<br /><b>На форуме:</b> ');
if (cMon<1 && cNear<1) document.write(cDay+tDay);
else if (cMon>=1 && cNear<1) document.write(cMon+tMon+cDay+tDay);
else document.write(cNear+tNear+cMon+tMon+cDay+tDay);
</script>
<!-- ENDIF -->
Надпись На форуме: можно поменять на Стаж:, либо на что нибудь своё.

Скрипт будет использовать правильный русский язык при отображении даты: месяцев, дней, лет, года и т.д.

Также скрипт можно немного переделать чтобы использовать в качестве отчета времени со дня основания форума, либо любого другого события, достаточно удалить первые пять строк кода и установит в d0 = new Date необходимую дату, следующего вида - 'September 24, 2013'.
Комментарии: 29

eska 25 сен 2013, 13:55 Сообщение

Скрипт отлично работает, только теперь Первая строчка "Зарегистрирован такого-то числа" лишняя, можно её убрать?
  • 0

CabinetAdmin 25 сен 2013, 14:14 Сообщение

Можно.
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

eska 25 сен 2013, 14:33 Сообщение

Я так понимаю нужно удалить переменную:

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

<!-- IF postrow.POSTER_JOINED --><br /><b>{L_JOINED}:</b> {postrow.POSTER_JOINED}<!-- ENDIF -->
Не повредит ли это структуру кода?
  • 0

CabinetAdmin 25 сен 2013, 15:41 Сообщение

Да, именно её. Нет, не повредит, если только чего лишнего не удалите:)
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

eska 25 сен 2013, 15:50 Сообщение

CabinetAdmin
Я её всю и удалил, всё отлично работает

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

<!-- IF postrow.POSTER_JOINED --><br /><b>{L_JOINED}:</b> {postrow.POSTER_JOINED}<!-- ENDIF -->
  • 0

Uzanka 26 сен 2013, 13:01 Сообщение

Большое спасибо за скрипт :Rose: Всё установила, всё работает :Yahoo!:
  • 0
Форум Science-Леди www.scienceclub.listbb.ru

Георгия 09 окт 2013, 18:29 Сообщение

Спасибо за скрипт!Очень кстати!Работает отлично! :Rose: :D
  • 0

carik 23 ноя 2013, 20:59 Сообщение

отличный скрипт! Спасибо!
есть вопрос проблемка:
- даты в формате в сегодня и вчера скрипт не понимает.
пробовал изменить переменную вывода даты в viewtopic.php не помогла, пишет NaN дней.
  • 0

carik 23 ноя 2013, 21:01 Сообщение

писал писал и не вижу поста...
спасибо за скрипт.
помогите решить вопрос с выводом скрипта NaN дней у пользователей с датой регистрации сегодня и вчера.
  • 0

CabinetAdmin 24 ноя 2013, 07:52 Сообщение

carik » Сегодня, 00:01 писал(а):писал писал и не вижу поста...
Первое сообщение после одобрения, последующие без.
carik » Вчера, 23:59 писал(а):даты в формате в сегодня и вчера скрипт не понимает
Да, действительно, не понимает.
+Как оказалось - бесполезные и ненужные правки
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

carik 24 ноя 2013, 18:00 Сообщение

CabinetAdmin
Доброго Вам!
Проверил изменения, к сожалению где то ошибка. У пользователя с момента регистрации 2 дня - пишет 0 дней. Правда при этом не появляется ошибки нан у нового пользователя.
С Вашего позволения, приведу немного другой код скрипта, который показывает только общее кол-во дней.

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

<!-- IF postrow.POSTER_JOINED --><dd><script>
p_j = '{postrow.POSTER_JOINED}';
ms='янвфевмарапрмайиюниюлавгсеноктноядек';
d = p_j.substr(0,2)*1;
m = ms.indexOf(p_j.substr(3,3))/3;
y = p_j.substr(7,4)*1;
date0 = new Date();
date1 = new Date(y,m,d);
dt=Math.floor((date0-date1)/(1000 * 60 * 60 * 24));
de = dt-Math.floor(dt/10)*10;
ds='дней';
if ((dt<10)|(dt>20))
{
if (de==1) ds='день'
else if ((de<5)&(de>0)) ds='дня'
};
document.write('<strong>На форуме:</strong> '+dt+' '+ds);
</script></dd><!-- ENDIF -->
этот код так же не понимает формат даты в словах, но возможно кому то будет полезным, меньше текста в минипрофиле.

Интересно, можно как то в "наглую" заменить NaN в отображение? что скрипт при результате "не число" писал какой нибудь текст, например " На форуме: первый день"
Спасибо.
  • 0

CabinetAdmin 24 ноя 2013, 19:27 Сообщение

carik писал(а):заменить NaN в отображение?
NaN это вроде как обозначение ошибки, когда значение не равно никакому другому числу.

Завтра, если время позволит, посмотрю.
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

carik 24 ноя 2013, 20:12 Сообщение

CabinetAdmin
CabinetAdmin » 37 минут назад писал(а):NaN это вроде как обозначение ошибки, когда значение не равно никакому другому числу.
Спасибо! Буду ждать Вашей помощи.
  • 0

CabinetAdmin 25 ноя 2013, 17:16 Сообщение

Я сначала и не понял, а оно вон оно чего:)... Всё дело в самой дате регистрации, т.е. общепринятый формат даты должен быть:

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

20 июл 2012, 17:00
это к примеру. Вводятся: число, месяц, год, у нас ещё и время. В нашем случае мы имеем такую дату:

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

Сегодня, 17:00
из-за чего и получаем NaN, скрипт не может высчитать дату, что в принципе и понятно. Не сможет он её высчитать и на следующий день, когда будет - Вчера, 17:00. И только когда дата приобретёт стандартный вид начнётся отсчёт.

Как-то так. Можно походить по спец сайтам, посмотреть, может и есть выходы, я к сожалению их не знаю. :( Если что увижу, обязательно отпишусь.
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

Похожие темы