jix unix时间戳早于x

时间:2015-02-18 23:58:33

标签: javascript unix-timestamp

我需要澄清一下我用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);

但我真的不确定这是否完全正确

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。