倒计时器与饼干

时间:2010-06-25 22:51:09

标签: javascript timer countdown

我知道有很多这样的话题,但我只是遇到了无法找到答案的问题。 我的剧本是:

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值多少。到目前为止,我设法计算两个值之间的差异,但我不知道如何制作格式,例如,从差异时间戳(差异),“dd / mm / yy hh:mm:ss”。有可能吗?

3 个答案:

答案 0 :(得分:2)

你想要的是一个将(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日到7月30日之间有多少个月?)。
  3. 如果你真的想要两次之间的月数,它们之间的秒数是不够的。您必须使用日历逻辑,这需要传递开始和结束日期+时间。

    PS:当您发布问题时,请避免不相关的细节。例如,您的问题与cookie,setInterval或onload处理程序无关。你不知道的唯一部分是如何将(mili)秒转换为天,小时等。提供一些关于你为什么要做某事的背景可能会有所帮助,但是如果不是必须要理解基本问题,把它放在最后,以便人们在进入必要部分之前不必趟过它。同样的建议也适用于你的头衔;通过排除不相关的细节(例如cookie和倒计时)来确保它是相关的。

答案 1 :(得分:0)

JavaScript没有任何内置的日期格式化方法,就像你已经完成任何PHP一样。相反,您必须手动构建字符串。但是,有许多getter方法对此有用。请参阅10 ways to format time and date using JavaScript

另外,你也知道。 Date.parse不返回时间戳的毫秒部分(向下舍入)。如果您需要毫秒,则可以执行以下任一操作

var d = new Date();
var timestamp_ms = Date.parse(d) + d.getMilliseconds();

或只是

var timestamp_ms = +d;

答案 2 :(得分:-1)

  1. 我不明白为什么你通过if ( !document.cookie )检查cookie但它在我的浏览器上不起作用所以我把它修改为if ( document.cookie )

  2. 尝试使用toString函数等。在javascript日期对象引用中查找它们。例如,

            var t = new Date;
        t.setTime(diff);
        var message = t.toTimeString() + " seconds left";
    
  3. 这将在我的浏览器上打印11:59:58 seconds left