1

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

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”。有可能吗?

4

3 回答 3

2

你想要的是将(毫)秒的差异转换为类似的函数

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 日到 2 日之间有多少个月) 7 月 30 日??)。

如果你真的想要两次之间的月数,那么它们之间的秒数是不够的。您必须使用日历逻辑,这需要传入开始和结束日期 + 时间。

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

于 2010-06-26T00:00:44.903 回答
0

JavaScript 没有任何内置的日期格式化方法,如果您使用过任何 PHP,您可能会期望这些方法。相反,您必须手动构建字符串。但是,有许多 getter 方法可用于此目的。查看使用 JavaScript 格式化时间和日期的 10 种方法

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

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

要不就

var timestamp_ms = +d;
于 2010-06-25T23:04:49.157 回答
-1
  1. 我不明白你为什么检查 cookieif ( !document.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在我的浏览器上。

于 2010-06-25T23:40:37.167 回答