javascript 早于 x 的 unix 时间戳

javascript unix timestamp older than x

我需要先澄清一下我用 unix 时间戳所做的假设,然后再做一些扰乱我的应用程序流程的事情,我根本无法想象这些数字我不想做相反的事情。 .

这里有一个关于 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 旧(none 这些是我现在刚刚制作的) ,我需要它来获得它遇到的第一个不是最旧的和 return 数组索引

如果我 运行 这个测试我会更加困惑,因为我在意大利我认为有些事情与时区或时钟有关,或者我有错误的想法

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);

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

JavaScript 的 Date 对象以毫秒为单位运行,而不是秒。

因此,对于 86400,您只是从当前时间戳中减去 84.6 ,而不是“一整天的秒数”您认为。您需要将该值乘以一千。

(并且减去 86400 秒并不意味着一直都是一天,因为一年中有两天分别长一小时或短一小时,至少在任何有夏令时的国家都是如此。是否是否与您的申请相关,您必须自己决定。)

您已经有了答案,但只是澄清一下: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
}

请注意,存储 then 值比每次迭代都计算它更有效。

您的 while 循环开始:

while(i--){

所以这是一个递减循环,因此您将获得超过 24 小时的最后一个值,而不是第一个。获得第一:

for (var i=0, iLen=list.length; i<iLen; i++) {
    if ((list[i][column] < then) {
      return i;
    }
}

这样,如果在比较时间之前没有更多时间,则函数return未定义。在OP中,如果找不到合适的时间,它将return -1。