t0h

JQuery - сколько прошло времени (javascript)

Feb 28, 2012 13:19

В одном из текущих проектов потребовалось реализовать функцию отсчета времени, прошедшего с какого-либо момента (Комментарий оставлен 5 минут назад)...
Для этого был сделан не большой плагин
Посмотреть в цвете http://pastebin.com/Pq7ztrmw в действии http://jsfiddle.net/_t0H/SdVca/

jQuery.fn.timeUpdate = function (filter,pole,intarval, options) {
  var options = jQuery.extend({
   lang: {
    years:   ['год', 'года', 'лет'],
    months:  ['месяц', 'месяца', 'месяцев'],
    days:    ['день', 'дня', 'дней'],
    hours:   ['час', 'часа', 'часов'],
    minutes: ['минута', 'минуты', 'минут'],
    seconds: ['секунда', 'секунды', 'секунд'],
    plurar:  function(n) { 
           return (n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }
   },
   end: " назад",
   tolkochto:"только что"
  }, options);

var timeDifference = function(end, begin) {
    if (end < begin) return false;
      var difference = {
       seconds: [end.getSeconds() - begin.getSeconds(), 60],
       minutes: [end.getMinutes() - begin.getMinutes(), 60],
       hours:   [end.getHours()   - begin.getHours()  , 24],
       days:    [end.getDate()    - begin.getDate()   , new Date(begin.getYear(), begin.getMonth() + 1, 0).getDate()],
       months:  [end.getMonth()   - begin.getMonth()  , 12],
       years:   [end.getYear()    - begin.getYear()   , 0]
      };
    if(difference.years[0]!=  0    ){ 
         delete (difference.days);   
          delete (difference.hours);   
          delete (difference.minutes);
          delete (difference.seconds); }
    else if(difference.months[0]!=0){ 
         delete (difference.hours);  
          delete (difference.minutes); 
          delete (difference.seconds); }
    else if(difference.days[0]!=0  ){ 
         delete (difference.minutes);
          delete (difference.seconds); }
    else if(difference.hours[0]!=0 ) 
         delete (difference.seconds); 
      var result = new Array();
      var flag = false;
      for (i in difference) {
       if (flag) {
        difference[i][0]--;
        flag = false;
       }     
       if (difference[i][0] < 0) {
        flag = true;
        difference[i][0] += difference[i][1];
       }
       if (!difference[i][0]) continue;
       result.push(difference[i][0] + ' ' + options.lang[i][options.lang.plurar(difference[i][0])]);
      }
      return result.reverse().join(' ');
  };
  var timeUpdate = function () {
      var need_to_time_update=$(filter);
     if(need_to_time_update.size()>0){
      need_to_time_update.each(function(i){
      var date=need_to_time_update.eq(i).attr(pole).toString().split(",");
      var s = timeDifference(new Date(), new Date(date[0],date[1]-1,date[2],date[3],date[4],date[5]));
        if (s.length) need_to_time_update.eq(i).html(s+options.end); 
             else need_to_time_update.eq(i).html(options.tolkochto);
      });
     }
  };
  timeUpdate();
  var timer = setInterval(timeUpdate, intarval);
 };
Использовать его просто

$("#countdown-example").timeUpdate('.need_to_time_update','time',1000);
Где - time="2012,02,26,04,46,31" Это - год,месяц,день,час,минута,секунда

20-01-2011 15:12:47 = 1 год 1 месяц назад
02-01-2012 21:32:47 = 1 месяц 26 дней назад
26-02-2012 07:06:07 = 2 дня 6 часов назад
27-02-2012 10:52:47 = 1 день 3 часа назад
27-02-2012 16:26:07 = 18 часов назад
28-02-2012 03:32:47 = 10 часов 8 минут назад
28-02-2012 13:39:27 = 38 секунд назад

скриптинг, pastebin.com, javascript, jquery, портфолио

Previous post Next post
Up