2012-12-07 9 views
8

Dostaję jakieś dane z SQL, który ma datownika i chcę sprawdzić, czy są one tego samego dnia lub nie ....wyboru dwa znaczniki czasu są tego samego dnia

w pętli próbuję sprawdzić poprzedni pętla timestamp jest taka sama jak w pętli prądowej datownik ...... próbuję coś takiego .....

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

ale chociaż są one tego samego dnia, ale różnią się one w czasie ...... Chcę tylko sprawdzić, czy oba są tego samego dnia, czy nie ... Mogę je przyciąć przed porównaniem ich tak, że działa dobrze ... ale czy istnieje inny skuteczny sposób, aby to zrobić ...

Pozdrowienia ...

+1

Tego samego dnia w jakiej strefie czasowej? –

+0

jego (GMT Standard Time) i używam znaczników czasowych unix .. – troy

+1

Czy w takim razie powinienem porównać z ostatnimi 24 godzinami? W ten sposób po prostu '| Time2 - Time1 | <24 godziny w ms' – agryson

Odpowiedz

12

To nie jest dla mnie jasne, jeśli chcesz sprawdzić, czy to ten sam dzień lub taka sama data: mówimy o tym samym dniu, ale z tego co robisz wydaje swój chcesz sprawdzić, czy to ta sama data. Sposób, aby sprawdzić, czy jest to ta sama data, jest następująca:

$.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); 
}) 

Zasadniczo utworzyć nowy obiekt Date, resetowanie wszystkich wartości czasu (godziny, minuty, sekundy i milisekundy).

Jeśli używasz previousdate tylko dla tej kontroli, można uprościć:

$.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; 
}); 

Oprócz operacji * 1000, że to najprostszy i najbezpieczniejszy sposób AFAIK. Pozwoliłeś silnikowi wykonać wszystkie obliczenia: nie wszystkie dni są wykonane przez 24 godziny - patrz czas letni - i nie wszystkie minuty są wykonane przez 60 sekund - patrz sekunda przestępna; więc nie jest bezpieczna żadna operacja, zakładając że.

Oczywiście, niektóre silniki również nie radzą sobie z sekundowym skokiem, ale nadal jest lepiej, przynajmniej na czas letni.

+0

Cześć zero, to jest to, po co jestem i dzięki za wyjaśnienie ..... – troy

3

Ponieważ interesuje Cię tylko data UTC, powinno to być łatwe. Znacznik czasu jest podawany w sekundach, więc jeśli podzielisz liczbę sekund w ciągu dnia, a następnie podliczysz wartość, powinieneś uzyskać liczbę dni od 1 stycznia 1970 roku. Jeśli obie wartości odpowiadają tej samej liczbie dni od 1970 roku , to masz mecz.

$.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; 
} 
+1

DST łamie to. Wypróbuj 'Math.floor (nowa data (" 11/25/13 ")/(24 * 60 * 60 * 1000)) == Math.floor (nowa data (" 11/24/13 23:00 ")/(24 * 60 * 60 * 1000)) '. To wychodzi prawda. – Andrew

10

Możesz także spróbować sprawdzić ich ciągi daty.

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

To jest ładne, ponieważ jest całkiem łatwe do zrobienia w linii.

+1

Wymagałoby to również dat również w tym samym czasie, dlatego zaakceptowana odpowiedź ustawia czas na obie do tej samej wartości przed porównaniem. – owencm

+0

Ah dzięki za to @owencm, naprawiono to teraz przełączając 'toString' na' toDateString'. – vpontis

Powiązane problemy