簡體   English   中英

帶有Cookie的倒數計時器

[英]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除去分數,但是如果希望顯示這些信息,也可以將它們保留為開。

幾個月和幾年變得有些棘手,原因有兩個:

  1. 一個月中的天數會有所不同。
  2. 從一個月中旬到下一個月中旬,即使天數> 31(例如,從6月2日到6月2日之間有多少個月, 7月30日?)。

如果您確實想要兩次之間的月份數,那么兩次之間的秒數是不夠的。 您必須使用日歷邏輯,這需要傳遞開始和結束日期+時間。

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;
  1. 我不明白為什么您要通過if ( !document.cookie )檢查cookie,但是它在我的瀏覽器中不起作用,因此我將其修改為if ( document.cookie )

  2. 嘗試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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM