Textpattern - на русском языке

форум общения русскоязычных пользователей CMS Текстпаттерн

Вы не зашли.

#1 04-02-2007 20:50:51

glebotr
ять
Зарегистрирован: 25-06-2005
Сообщений: 1974
Вебсайт

Один из способов красиво сформатировать даты

Откуда задача взялась -- все знают. Так вот, до недавнего времени меня устраивал формат типа "30.11.06". Но вот подумал, почему бы для пользователей продвинутых браузеров не сделать красиво?

Итого -- очень грубый скриптик, заменяющий дату в вышеуказанном формате на нечто удобоваримое. Ссылка стаится в head, потом в onLoad записывается refineDates()
Даты для коррекции должны выводится внутри любого элемента (span) с присвоенным классом nicedate (не обязательно один класс).

Код:

function getElementsByClassName(classname){
customcollection = new Array();
  var inc=0
  var alltags=document.all? document.all : document.getElementsByTagName("*")
  for (i=0; i<alltags.length; i++){
    if (alltags[i].className.indexOf(classname)!=-1){
      customcollection[inc++]=alltags[i];
    }
  }
    return customcollection; 
}

//dd.mm.yy
function doDate(datestr){
var dArray = datestr.split("."); 
if(dArray.length!=3){return datestr;}
rez = new Date();
rez.setFullYear(parseFloat("20"+dArray[2]));
rez.setMonth(parseFloat(dArray[1])-1);
rez.setDate(parseFloat(dArray[0]));
//alert (rez);
return rez;
}

function refineDate(datedt){
if(typeof(datedt)== "string"){return datedt;}
Now = new Date();

Months = new Array("января","февраля","марта","апреля","мая","июня","июля", "августа","сентября","октября","ноября","декабря");
Days = new Array ("Воскресенье","Понедельник", "Вторник" , "Среда" , "Четверг","Пятница" , "Суббота" , "Воскресенье");
var rez =  datedt.getDate() +" " + Months[datedt.getMonth()] + " " + datedt.getFullYear() + "&nbsp\;г.";

var dDiff = Math.floor((Now.getTime()-datedt.getTime())/(1000*60*60*24) );
var wDiff = 1;
if (dDiff<=7){wDiff=0};  
var mDiff = Now.getMonth() - datedt.getMonth();
var yDiff = Now.getYear() - datedt.getYear();

if (mDiff==0){rez = datedt.getDate() + "-го числа"};
if (wDiff==0){rez = Days[datedt.getDay()]};

if (dDiff==0){rez =  "Сегодня" };
if (dDiff==1){rez =  "Вчера"};
if (dDiff==2){rez = "Позавчера"};
if (dDiff==3){rez =  "Три дня назад"};

//alert (rez);
return rez;
}

function refineDates(){
var allDates = getElementsByClassName("nicedate");
    for(i=0;i<allDates.length;i++){
    allDates[i].innerHTML = refineDate(doDate(allDates[i].innerHTML));
    }
}

Для дат в текущем году не пишем год (ибо канцеляризм), для дат в пределах трех дней пишем по человечески:сегодня, вчера, позавчера, три дня назад.


Прошу усовершентвований от лучше-знающих-javascript (скрипт не самый "мирный" к другим скриптам). Думаю, что надо сделать вывод даты словами в пределах одной недели -- "понедельник", "прошлая пятница" и так далее. Ну и просто -- улучшать есть что.

Отредактированно glebotr (12-05-2009 11:50:02)


Пх’нглуи мглв’нафх Ленин Красная площадь вгах’нагл фхтагн
(В своем доме на Красной площади мертвый Ленин спит, ожидая своего часа (ктулх.))

Неактивен

 

#2 30-08-2011 13:04:22

magenta
есть
Зарегистрирован: 17-11-2010
Сообщений: 56
Вебсайт

Re: Один из способов красиво сформатировать даты

Вставляю код вышеуказанной функции в HEAD,
в BODY ставлю так <body onLoad="refineDates()";>,
формат вывода даты устанавливаю 29.08.11
в форме вывода статьи ставлю <span class="nicedate"><txp:posted /></span>

Почему ничего не меняется?


Удача любит смелых!

Неактивен

 

#3 08-09-2011 19:11:49

magenta
есть
Зарегистрирован: 17-11-2010
Сообщений: 56
Вебсайт

Re: Один из способов красиво сформатировать даты

glebotr Благодарю, разобрался. как часто случается, дело было не в бобине. В посте не хватает <script></script> и точки с запятой.

Но почему то у меня дата меняется после полной загрузки страници, а не сразу. не знаю почему


Удача любит смелых!

Неактивен

 

Board footer

RSS   Rambler's Top100
Powered by PunBB
Textpattern.ru