2012-07-30 79 views
0

我正在開發一個asp.net應用程序,其中我使用的是timeago jQuery插件,我面臨的事實是,當UTC的本地時間爲5.00時,我在服務器上獲取UTC時間我正在獲取UTC時間。Timeago jquery插件時區

所以現在的問題是如何將UTC轉換爲GMT + 5.00,如果我現在正在獲取時間,那麼它會在5小時前給出輸出結果,表明輸出格林威治標準時間。

我知道這個問題重複,但我無法理解以前的 討論的問題。預先

(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?還是客戶端? – 2012-07-30 10:50:34

回答

0

嘗試使用Livestamp.js像這樣的東西:

date是你正試圖輸出DateTime對象。

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

你輸出Unix時間戳,它總是在UTC,所以它並不重要用戶的計算機是什麼時區,它總是會打印出正確的「TIMEAGO」文本。