2012-07-30 2 views
0

나는jQuery의 플러그인을 사용하고있는 asp.net 애플리케이션을 개발 중이다. 현지 시간이 GMT + 5.00이고 서버에있을 때마다 나는 UTC로 시간을 얻고있다. 측면 나는 UTC 시간을 받고있다.Timeago jquery Plugin Timezone

그래서 지금 질문은 이것이 UTC를 GMT + 5.00으로 변환하는 방법입니다. 지금 당장 시간을 얻으면 5 시간 전에 출력이 GMT로 표시됩니다.

나는이 질문이 반복되는 것을 알고 있지만 이전에 토론 된 질문을 이해할 수 없습니다. 사전에

(function ($) { 
    $.timeago = function (timestamp) { 
     if (timestamp instanceof Date) { 
      return inWords(timestamp); 
     } else if (typeof timestamp === "string") { 
      return inWords($.timeago.parse(timestamp)); 
     } else if (typeof timestamp === "number") { 
      return inWords(new Date(timestamp)); 
     } else { 
      return inWords($.timeago.datetime(timestamp)); 
     } 
    }; 
    var $t = $.timeago; 

    $.extend($.timeago, { 
     settings: { 
      refreshMillis: 60000, 
      allowFuture: false, 
      strings: { 
       prefixAgo: null, 
       prefixFromNow: null, 
       suffixAgo: "ago", 
       suffixFromNow: "from now", 
       seconds: "less than a minute", 
       //minute: "about a minute", 
       minute: "a minute", 
       minutes: "%d minutes", 
       //hour: "about an hour", 
       hour: "an hour", 
       //hours: "about %d hours", 
       hours: "%d hours", 
       day: "a day", 
       days: "%d days", 
       //month: "about a month", 
       month: "a month", 
       months: "%d months", 
       //year: "about a year", 
       year: "a year", 
       years: "%d years", 
       wordSeparator: " ", 
       numbers: [] 
      } 
     }, 
     inWords: function (distanceMillis) { 
      var $l = this.settings.strings; 
      var prefix = $l.prefixAgo; 
      var suffix = $l.suffixAgo; 
      if (this.settings.allowFuture) { 
       if (distanceMillis < 0) { 
        prefix = $l.prefixFromNow; 
        suffix = $l.suffixFromNow; 
       } 
      } 

      var seconds = Math.abs(distanceMillis)/1000; 
      var minutes = seconds/60; 
      var hours = minutes/60; 
      var days = hours/24; 
      var years = days/365; 

      function substitute(stringOrFunction, number) { 
       var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; 
       var value = ($l.numbers && $l.numbers[number]) || number; 
       return string.replace(/%d/i, value); 
      } 

      var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || 
     seconds < 90 && substitute($l.minute, 1) || 
     minutes < 45 && substitute($l.minutes, Math.round(minutes)) || 
     minutes < 90 && substitute($l.hour, 1) || 
     hours < 24 && substitute($l.hours, Math.round(hours)) || 
     hours < 42 && substitute($l.day, 1) || 
     days < 30 && substitute($l.days, Math.round(days)) || 
     days < 45 && substitute($l.month, 1) || 
     days < 365 && substitute($l.months, Math.round(days/30)) || 
     years < 1.5 && substitute($l.year, 1) || 
     substitute($l.years, Math.round(years)); 

      var separator = $l.wordSeparator === undefined ? " " : $l.wordSeparator; 
      return $.trim([prefix, words, suffix].join(separator)); 
     }, 
     parse: function (iso8601) { 
      var s = $.trim(iso8601); 
      s = s.replace(/\.\d+/, ""); // remove milliseconds 
      s = s.replace(/-/, "/").replace(/-/, "/"); 
      s = s.replace(/T/, " ").replace(/Z/, " UTC"); 
      s = s.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2"); // -04:00 -> -0400 
      return new Date(s); 
     }, 
     datetime: function (elem) { 
      var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); 
      return $t.parse(iso8601); 
     }, 
     isTime: function (elem) { 
      // jQuery's `is()` doesn't play well with HTML5 in IE 
      return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); 
     } 
    }); 

    $.fn.timeago = function() { 
     var self = this; 
     self.each(refresh); 

     var $s = $t.settings; 
     if ($s.refreshMillis > 0) { 
      setInterval(function() { self.each(refresh); }, $s.refreshMillis); 
     } 
     return self; 
    }; 

    function refresh() { 
     var data = prepareData(this); 
     if (!isNaN(data.datetime)) { 
      $(this).text(inWords(data.datetime)); 
     } 
     return this; 
    } 

    function prepareData(element) { 
     element = $(element); 
     if (!element.data("timeago")) { 
      element.data("timeago", { datetime: $t.datetime(element) }); 
      var text = $.trim(element.text()); 
      if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { 
       element.attr("title", text); 
      } 
     } 
     return element.data("timeago"); 
    } 

    function inWords(date) { 
     return $t.inWords(distance(date)); 
    } 

    function distance(date) { 
     return (new Date().getTime() - date.getTime()); 
    } 

    // fix for IE6 suckage 
    document.createElement("abbr"); 
    document.createElement("time"); 
(jQuery)); 
} 

감사 :

플러그인의 코드

은 아래와 같습니다.

+0

UTC에서 GMT + 5로 "변환"할 서버 쪽입니까? 아니면 고객 측? –

답변

0

이 같은 뭔가 Livestamp.js를 사용해보십시오 :

date 당신이 출력하려고하는 DateTime 개체입니다.

<span data-livestamp="<%= (date - new DateTime(1970,1,1,0,0,0)).TotalSeconds) %>"> 
</span> 

당신은 UTC 항상 유닉스 타임 스탬프를 출력하는, 그래서 사용자의 컴퓨터에 어떤 시간대 중요하지 않습니다. 그것은 항상 올바른 "TIMEAGO"텍스트를 인쇄합니다.