форум общения русскоязычных пользователей CMS Текстпаттерн
Вы не зашли.
Откуда задача взялась -- все знают. Так вот, до недавнего времени меня устраивал формат типа "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() + " \;г."; 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)
Неактивен
Вставляю код вышеуказанной функции в HEAD,
в BODY ставлю так <body onLoad="refineDates()";>,
формат вывода даты устанавливаю 29.08.11
в форме вывода статьи ставлю <span class="nicedate"><txp:posted /></span>
Почему ничего не меняется?
Неактивен
glebotr Благодарю, разобрался. как часто случается, дело было не в бобине. В посте не хватает <script></script> и точки с запятой.
Но почему то у меня дата меняется после полной загрузки страници, а не сразу. не знаю почему
Неактивен