检查两个时间戳是同一天

时间:2012-12-07 13:02:51

标签: javascript jquery

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

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

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

但是虽然它们是同一天,但它们在时间上有所不同......我只想检查它们是否在同一天......我可以在比较它们之前修剪它们以便它可以正常工作....但还有其他有效的方法吗.....

干杯...

4 个答案:

答案 0 :(得分:15)

您还可以尝试检查其日期字符串。

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

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

答案 1 :(得分:12)

我不清楚你是否要检查它是在同一天还是同一天:你谈论的是同一天但是从你正在做的事情看来你想要检查它是否是同一天。检查是否是相同日期的方法如下:

$.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对象,重置所有时间值(小时,分钟,秒和毫秒)。

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

$.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秒 - 见闰秒;所以假设这样做是不安全的。

当然,有些引擎也无法处理闰秒,但它仍然更好,至少在夏令时期间。

答案 2 :(得分: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;
}

答案 3 :(得分:-1)

对于将来的Google员工来说,这对我有用:

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

注意:您的时间戳记必须以毫秒为单位。如果以秒为单位,则需要进行调整。