2012-12-21 66 views
1

我要更新頁面上的記錄裏或申報單顯示的時間來更新時間。 我已經把這個記錄的創建時間放在每個記錄的隱藏字段中。如何使用JS客戶端

例如:

# Hi what are you doing? 
    5 minute ago. <hidden id='1' value='1345888475'> 

# Akon song is good 
    10 minute ago <hidden id='2' value='1345888855'> 

# I love the way you lie 
    15 minute ago <hidden id='3' value='1345889995'> 

我怎樣才能更新時間每分鐘?所以一分鐘後第一個div應該說6分鐘前 第二個會說11分鐘前?

這有可能使用JS。我不想去這個PHP。只使用JS。 DB中的時間存儲爲strtotime(date("Y-m-d H:i:s"))

謝謝!

+2

你的意思是_minute_吧? –

+0

你只是想顯示一分鐘前?或者幾天,幾小時等? – Dogbert

+9

@TomWalters很明顯,他在編程時正在做飯,他需要吃新鮮的東西。 – 2012-12-21 18:13:30

回答

5

個人而言,我會使用HTML這樣的:

<span data-time="1345888475">Loading...</span> 

然後在你的腳本有類似:

(function() { 
    var timetostring(secs) { 
     if(secs < 60) return secs+" seconds ago"; 
     secs = Math.floor(secs/60); 
     if(secs < 60) return secs+" minutes ago"; 
     secs = Math.floor(secs/60); 
     if(secs < 24) return secs+" hours ago"; 
     secs = Math.floor(secs/24); 
     return secs+" days"; // you can of course continue 
    }; 
    (function() { 
     var qsa = document.querySelectorAll("[data-time]"), l = qsa.length, i, t; 
     for(i=0; i<l; i++) { 
      t = new Date().getTime()/1000-qsa[i].getAttribute("data-time"); 
      qsa[i].firstChild.nodeValue = timetostring(t); 
     } 
     setTimeout(arguments.callee,15000); 
    }); 
})(); 
+0

非常感謝:)完美而簡單。 – 99Points

2

你可以嘗試使用Moment.js這一切在Javascript中有關時間管理一個完美的事情,並且非常輕巧庫。該API非常清晰,有據可查並且功能強大。 我使用它作爲我的一個項目,至今我非常滿意。

您可以使用時間自動更新處理這是你想要什麼,很容易的東西,如下面的例子:

時刻(「20111031」,「年月日」)fromNow(); //一年前

時刻( 「20120620」, 「年月日」)fromNow()。 // 3個月前

時刻()STARTOF( '天')fromNow()。 // 20小時前

時刻()endOf( '天')fromNow()。 //在5小時內

要使時間刷新自己,您可以在setInterval處理程序中調用這些函數。

2

你可以在JS做到這一點,你需要幾個部分:

  1. 確定需要更改的部分並給出其創建時間
  2. 計時器t帽子每分鐘更新一次,你需要用php來告訴js它是什麼時間
  3. 一個在頁面加載時將時間轉換爲可讀文本的腳本。

http://jsfiddle.net/gunderson/srKET/

<div class="message" id='1' data-timestamp='1345888475'> 
    <span class="content"># Hi what are you doing? </span><br/> 
    <span class="timeAgo">5 mint ago. </span> 
    </div> 

    var currentTime = <?=time()?>; 
    var timestampHandler = setInterval(onUpdateTimestamp, 60 * 1000); //one minute 
    function onUpdateTimestamp(){ 
     currentTime += 60; 
     $(".message").each(updateTimeAgo); 
    } 

    function updateTimeAgo(){ 
     var $el = $(this); 
     var postTime = parseInt($el.data('timestamp')); 
     var newTimeAgo = (currentTime - postTime)/60; //minutes 
     $el.find(".timeAgo").html(newTimeAgo + " mint ago.") 
    }