[英]Countdown timer with cookies
我知道有很多這樣的話題,但是我遇到的問題是我找不到答案。 我的腳本是:
window.onload = function(){
// 200 seconds countdown
var countdown = 14400;
//current timestamp
var now = Date.parse(new Date());
//ready should be stored in your cookie
if ( !document.cookie )
{
document.cookie = Date.parse(new Date (now + countdown * 1000)); // * 1000 to get ms
}
//every 1000 ms
setInterval(function()
{
var diff = ( document.cookie - Date.parse(new Date()) );
if ( diff > 0 )
{
var message = diff/1000 + " seconds left";
}
else
{
var message = "finished";
}
document.body.innerHTML = message;
},1000);
}
我想做一個倒數計時器,它告訴用戶剩余的時間取決於他的cookie值。 到目前為止,我設法計算了兩個值之間的差,但是我不知道如何根據差值時間戳記(diff)使格式類似“ dd / mm / yy hh:mm:ss”。 有可能嗎?
您想要的是一個將(mili)秒的差異轉換為類似內容的函數
5d 4h 3m 2s
如果您不介意在幾天以上的幾個月中花費大量時間,則可以使用以下方法:
function human_time_difference(diff) {
var s = diff % 60; diff = Math.floor(diff / 60);
var min = diff % 60; diff = Math.floor(diff / 60);
var hr = diff % 24; diff = Math.floor(diff / 24);
var days = diff;
return days + 'd ' + hr + 'h ' + min + 'm ' + s + 's';
}
如果您有毫秒數的差異,則需要將該數字除以1000。您還可以使用Math.round除去分數,但是如果希望顯示這些信息,也可以將它們保留為開。
幾個月和幾年變得有些棘手,原因有兩個:
如果您確實想要兩次之間的月份數,那么兩次之間的秒數是不夠的。 您必須使用日歷邏輯,這需要傳遞開始和結束日期+時間。
PS:發布問題時,請避免使用無關的詳細信息。 例如,您的問題與Cookie,setInterval或onload處理程序無關。 您唯一不知道的部分是如何將(mili)秒轉換為天,小時等。提供一些有關您為何要執行某項操作的背景可能會有所幫助,但是如果不需要了解基本問題,將它放在最后,這樣人們就不必在進入關鍵部分之前就去研究它。 同樣的建議也適用於您的頭銜。 排除不相關的細節(例如cookie和倒數),以確保其相關性。
JavaScript沒有內置的日期格式設置方法,就像您完成任何PHP一樣。 相反,您必須手動構建字符串。 但是,有許多吸氣方法對此有用。 查看使用JavaScript格式化時間和日期的10種方法 。
另外,您也知道。 Date.parse
不返回時間戳的毫秒部分(四舍五入)。 如果需要毫秒,可以執行以下任一操作
var d = new Date();
var timestamp_ms = Date.parse(d) + d.getMilliseconds();
要不就
var timestamp_ms = +d;
我不明白為什么您要通過if ( !document.cookie )
檢查cookie,但是它在我的瀏覽器中不起作用,因此我將其修改為if ( document.cookie )
嘗試toString函數和其他。 在javascript Date對象參考中查找它們。 例如,
var t = new Date; t.setTime(diff); var message = t.toTimeString() + " seconds left";
這將在我的瀏覽器上打印11:59:58 seconds left
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.