Javascript 饼干倒计时

Javascript 饼干倒计时,javascript,timer,countdown,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.c

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

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”的格式。有可能吗

JavaScript没有任何内置的日期格式化方法,如果您使用过PHP,您可能会想到这一点。相反,您必须手动构建字符串。然而,有许多getter方法将对这一目标有用。看

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

var d = new Date();
var timestamp_ms = Date.parse(d) + d.getMilliseconds();
或者只是

var timestamp_ms = +d;

JavaScript没有任何内置的日期格式化方法,如果您使用过PHP,您可能会想到这一点。相反,您必须手动构建字符串。然而,有许多getter方法将对这一目标有用。看

还有,让你知道
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)

  • 尝试使用字符串函数和其他。在javascript日期对象引用中查找它们。比如说,

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

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

  • 尝试使用字符串函数和其他。在javascript日期对象引用中查找它们。比如说,

            var t = new Date;
        t.setTime(diff);
        var message = t.toTimeString() + " seconds left";
    

  • 这将在我的浏览器上打印
    11:59:58秒

    您需要的是一个函数,它可以将以(毫秒)为单位的差值转换为

    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删除分数,但如果您希望显示这些信息,也可以将其保留为打开状态

    由于以下几个原因,获得月数和年数有点棘手:

  • 一个月的天数各不相同
  • 从一个月中到下一个月中,即使天数>31天(例如,6月2日到7月30日之间有多少个月??),时间跨度也不会覆盖整个月
  • 如果你真的想要两次之间的月数,那么两次之间的秒数是不够的。您必须使用日历逻辑,这需要传入开始和结束日期+时间


    附言:当你发布问题时,避免不相关的细节。例如,您的问题与cookie、setInterval或onload处理程序无关。你唯一不知道的部分是如何将(百万)秒转换为天、小时等。提供一些背景知识也许会有帮助,说明你为什么要尝试做某件事,但是如果理解基本问题不是必需的,那么就把它放在最后,这样人们就不必在进入关键部分之前费力地阅读。同样的建议也适用于你的头衔;通过排除不相关的细节(例如cookies和倒计时)来确保它是相关的。

    您需要的是一个函数,它可以将以(毫秒)为单位的差值转换为

    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删除分数,但如果您希望显示这些信息,也可以将其保留为打开状态

    由于以下几个原因,获得月数和年数有点棘手:

  • 一个月的天数各不相同
  • 从一个月中到下一个月中,即使天数>31天(例如,6月2日到7月30日之间有多少个月??),时间跨度也不会覆盖整个月
  • 如果你真的想要两次之间的月数,那么两次之间的秒数是不够的。您必须使用日历逻辑,这需要传入开始和结束日期+时间


    附言:当你发布问题时,避免不相关的细节。例如,您的问题与cookie、setInterval或onload处理程序无关。你唯一不知道的部分是如何将(百万)秒转换为天、小时等。提供一些背景知识也许会有帮助,说明你为什么要尝试做某件事,但是如果理解基本问题不是必需的,那么就把它放在最后,这样人们就不必在进入关键部分之前费力地阅读。同样的建议也适用于你的头衔;通过排除不相关的细节(例如cookies和倒计时)确保它是相关的。

    好吧,我说过尝试使用toString函数和其他函数。当您使用“t.toString()”时,日期差和时间差都会显示。我不知道,但toTimeString给了我这个“02:54:34 GMT+0200(FLE标准时间)秒剩余时间”。我说过尝试使用toString函数和其他函数。当您使用“t.toString()”时,将同时显示日期差和时间差。我不知道,但toTimeString给了我这个“02:54:34 GMT+0200(FLE标准时间)秒剩余”。