11

我从 SQL 中获取了一些带有时间戳的数据,我想检查它们是否是同一天......

在一个循环中,我试图检查前一个循环时间戳是否与当前循环时间戳相同......我正在尝试这样的事情......

$.each(data, function(key, value) {
   if( new Date([value.startTime] * 1000) === previousdate){
       console.log("*** Same day ***");
    }
    previousdate = new Date([value.startTime] * 1000);
}

但是虽然它们是同一天但它们的时间不同......我只是想检查它们是否是同一天......我可以在比较它们之前修剪它们,这样它就可以正常工作...... .但是有没有其他有效的方法来做到这一点......

干杯...

4

4 回答 4

20

您也可以尝试检查他们的日期字符串。

var isSameDay = function(date, otherDate) {
  return date.toDateString() === otherDate.toDateString();
};

这很好,因为它很容易内联。

于 2014-08-04T20:10:37.860 回答
15

我不清楚您是否想检查它是同一天还是同一日期:您谈论同一天,但从您所做的事情来看,您似乎想检查它是否是同一天。检查日期是否相同的方法如下:

$.each(data, function(key, value) {
    var current = new Date(value.startTime * 1000).setHours(0, 0, 0, 0);
    var previous = new Date(previousDate).setHours(0, 0, 0, 0);

    if(current === previous){
        console.log("*** Same day ***");
    }
    previousdate = new Date([value.startTime] * 1000);
})

您基本上创建了一个新的 Date 对象,重置所有时间值(小时、分钟、秒和毫秒)。

如果您使用previousdateonly 进行此检查,则可以简化:

$.each(data, function(key, value) {
    var current = new Date(value.startTime * 1000).setHours(0, 0, 0, 0);

    if(current === previousdate){
        console.log("*** Same day ***");
    }

    previousdate = current;
});

除了* 1000操作之外,这是AFAIK最简单,最安全的方式。你让引擎做所有的计算:不是所有的日子都是按 24 小时计算的——看夏令时——也不是所有的分钟都是按 60 秒计算的——看闰秒;所以假设这样做是不安全的。

当然,例如,某些引擎也无法处理闰秒,但它仍然更好,至少对于夏令时而言。

于 2012-12-07T13:53:11.550 回答
3

由于您只关心 UTC 日期,这应该很容易。您的时间戳是秒数,因此如果您除以一天中的秒数,然后将该值取底,您应该得到自 1970 年 1 月 1 日以来的天数。如果两个值自 1970 年以来的天数相同,那么你就有了比赛。

$.each(data, function(key, value) {
    var date, previous;
    date = Math.floor(value.startTime / 60 / 60 / 24);
    if (date === previous){
       console.log("*** Same day ***");
    }
    previous = date;
}
于 2012-12-07T13:10:26.323 回答
-1

对于未来的谷歌人来说,这对我有用:

function isSameDay(firstTimeStamp, secondTimeStamp) {
    return (new Date(firstTimeStamp).getDate() === (new Date(secondTimeStamp).getDate());
}

注意:您的时间戳需要以毫秒为单位。如果它们在几秒钟内,您将需要调整它们。

于 2018-09-11T16:49:12.797 回答