我知道有很多这样的话题,但我只是遇到了无法找到答案的问题。 我的剧本是:
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”。有可能吗?
答案 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去除分数,但如果你想要那么你也可以将它们打开显示的信息。
由于以下几个原因,花费数月和数年时间有点棘手:
如果你真的想要两次之间的月数,它们之间的秒数是不够的。您必须使用日历逻辑,这需要传递开始和结束日期+时间。
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)
我不明白为什么你通过if ( !document.cookie )
检查cookie但它在我的浏览器上不起作用所以我把它修改为if ( document.cookie )
尝试使用toString函数等。在javascript日期对象引用中查找它们。例如,
var t = new Date;
t.setTime(diff);
var message = t.toTimeString() + " seconds left";
这将在我的浏览器上打印11:59:58 seconds left
。