2012-05-24 70 views
0

我正在使用jQuery timeago在我的網站上顯示評論發佈時間。問題是它顯示完全不同(10小時不同)時間,然後它應該是。在我的本地服務器,它工作正常。jQuery時間前用php時間戳

TIMEAGO:http://timeago.yarp.com/

/** 
* Timeago is a jQuery plugin that makes it easy to support automatically 
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). 
* 
* @name timeago 
* @version 0.11.1 
* @requires jQuery v1.2.3+ 
* @author Ryan McGeary 
* @license MIT License - http://www.opensource.org/licenses/mit-license.php 
* 
* For usage and examples, visit: 
* http://timeago.yarp.com/ 
* 
* Copyright (c) 2008-2011, Ryan McGeary (ryanonjavascript -[at]- mcgeary [*dot*] org) 
*/ 
(function($) { 
    $.timeago = function(timestamp) { 
    if (timestamp instanceof Date) { 
     return inWords(timestamp); 
    } else if (typeof timestamp === "string") { 
     return inWords($.timeago.parse(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", 
     minutes: "%d minutes", 
     hour: "about an hour", 
     hours: "about %d hours", 
     day: "a day", 
     days: "%d days", 
     month: "about a month", 
     months: "%d months", 
     year: "about 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\d\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) { 
     // jQuery's `is()` doesn't play well with HTML5 in IE 
     var isTime = $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); 
     var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title"); 
     return $t.parse(iso8601); 
    } 
    }); 

    $.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) { 
     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)); 

IM儲蓄日期和時間使用date('r',time());

即時顯示使用<abbr class="timeago" title="2012-05-24 02:18:59"></abbr>

+0

如果這是動態的,那麼請檢查您的服務器時間戳,這可能是差異。 –

回答

0

其區域問題的時候我的數據庫。它更好地使用服務器的UTC時間。你可以通過在你的頁面中使用下面的JavaScript獲得區域。

var d = new Date(); var zone = -d.getTimezoneOffset()/60; 
+0

你是指在timeago jquery上使用它,或者用它來保存數據庫中的時間戳嗎?謝謝 –

+0

d.getTimezoneOffset()返回正負分;所以這裏沒有錯? – 2012-05-24 09:36:48

+0

nope .......區域可以爲負..... EST/PST時區爲負值。 –