我需要澄清一下我用unix时间戳做出的一个假设,然后我做了一些让我的应用流程混乱的东西,我无法想象数字,我不想做相反的事情。< / p>
这里有一个关于php的问题但不是我用javascript找到的那个
How to check if a timestamp is an hour old?
我的应用程序将构建我的数组数组,如
var list=[
['name0',1424300986716,1424301040055,1424301049633],
['name1',1424300998116,1424301019372,1424301059418],
['name2',1424301009043,1424301030315,1424301059418]
//...
];
我想确定第二列时间戳是否有一个超过24小时 long 旧的(这些都不是我现在制作的),我需要它来获得第一列它遇到的不是最老的并返回数组索引
如果我参加这个测试,我会更加困惑,因为我在意大利,我觉得有些东西是时区或时钟,或者我有错误的想法
var now=(+new Date());
var back24hrs=new Date((now-86400));
console.log(now,back24hrs);
// 1424303535659 Thu Feb 19 2015 00:50:49 GMT+0100 (W. Europe Standard Time)
现在星期四现在已经24小时了!我看不出我错了..
基本上我的假设是(当前时间 - 24小时)我认为那部分是正确的,但也不到或大于节省的时间?
我在考虑做这样的事情:
function olderthan24hrs(column){
var hrs24=86400;
var i=list.length;
while(i--){
if((+new Date()-hrs24)>list[i][column]){break;}
}
return i;
}
var choice=olderthan24hrs(2);
但我真的不确定这是否完全正确
答案 0 :(得分:1)
JavaScript的Date
对象以毫秒而非秒为单位运行。
因此,对于86400
,您只需从当前时间戳中减去84.6
秒,而不是“一整天的秒数”。您需要将该值乘以一千。
(减去86400秒并不意味着一直只有一天,因为一年中有两天的时间比一小时更长,至少在任何有夏令时的国家都是如此。无论是否这与您的申请相关,您必须自己决定。)
答案 1 :(得分:1)
您已经有了答案,但只是为了澄清:UNIX和JavaScript(ECMAScript)对时间值使用相同的纪元,但UNIX时间值为秒,javascript时间值以毫秒为单位。 24小时内有8.64e7毫秒。
如果您想查看时间是否超过24小时前,请通过从时间值中减去24小时秒值来设置比较值,以秒为单位:
// Current time value in seconds
var then = (Date.now()/1000 | 0) - 8.64e4;
但是,当它跨越夏令时边界时,与前一天相关的时间将是+/- 1小时。
如果你想比较昨天的同一时间(比夏令时边界长23或25小时),使用日期对象并减去一天来创建比较值:
var now = new Date();
var then = +(now.setDate(now.getDate() - 1))/1000 | 0;
然后进行比较(两者相同):
if (list[i][column] < then) {
// value is prior to comparison time
}
请注意,存储然后值比在每次迭代时计算它更有效。
你的while循环开始了:
while(i--){
所以这是一个递减循环,所以你将获得超过24小时的最后一个值,而不是第一个。获得第一个:
for (var i=0, iLen=list.length; i<iLen; i++) {
if ((list[i][column] < then) {
return i;
}
}
这样,如果在比较时间之前没有时间,则函数返回undefined。在OP中,如果找不到合适的时间,它将返回-1。