2012-12-07 13 views
8

sto ottenendo alcuni dati da SQL che ha timestamp e posso controllare Wanna se sono nello stesso giorno o no ....controllo due timestamp sono nello stesso giorno

In un ciclo sto cercando di controllare la precedente ciclo timestamp è lo stesso come il timestamp loop di corrente ...... sto cercando qualcosa di simile .....

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

ma anche se sono nello stesso giorno, ma differiscono nel tempo ...... Voglio solo verificare che entrambi siano lo stesso giorno o meno ..... Posso tagliarli prima di confrontarli in modo che funzioni bene ... ma c'è un altro modo efficace per farlo .....

Cin cin ...

+1

Lo stesso giorno in quale fuso orario? –

+0

(ora standard GMT) e sto usando timestamp unix .. – troy

+1

Sarebbe ok confrontare invece con le ultime 24 ore? In questo modo è solo '| Tempo2 - Tempo1 | <24 ore in ms' – agryson

risposta

12

Non è chiaro per me se si desidera controllare se è lo stesso giorno o nella stessa data: si parla nello stesso giorno, ma da quello che si sta facendo sembra vostro voglia di controllare se è la stessa data. Un modo per verificare se è la stessa data, è la seguente:

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

Che, fondamentalmente, creare un nuovo oggetto Date, il ripristino di tutti i valori di tempo (ore, minuti, secondi e millisecondi).

Se si utilizza l'previousdate solo per questo controllo, è possibile semplificare:

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

Oltre l'operazione * 1000, che è il modo più semplice e sicuro per quanto ne so. Lascia che il motore esegua tutti i calcoli: non tutti i giorni sono fatti di 24 ore - vedi l'ora legale - e non tutti i minuti sono fatti di 60 secondi - vedi il secondo intercalare; quindi non è sicuro effettuare alcuna operazione supponendo che.

Ovviamente alcuni motori non sono in grado di gestire anche il secondo intercalare, ad esempio, ma è ancora meglio, almeno per l'ora legale.

+0

Ciao zero questo è quello che sto dopo, e grazie per la spiegazione ..... – troy

3

Dal momento che vi interessa soltanto la data UTC, questo dovrebbe essere facile. La data e l'ora sono in numero di secondi, quindi se dividi per il numero di secondi in un giorno e quindi importi il ​​valore, dovresti ottenere il numero di giorni dal 1 ° gennaio 1970. Se entrambi i valori sono lo stesso numero di giorni dal 1970 , quindi hai una corrispondenza.

$.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 rompe questo. Prova 'Math.floor (new Date (" 25/11/13 ")/(24 * 60 * 60 * 1000)) == Math.floor (new Date (" 24/11/13 23:00 ")/(24 * 60 * 60 * 1000)) '. Viene fuori vero. – Andrew

10

Si può anche provare a verificare le loro stringhe di data.

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

Questo è bello perché è abbastanza facile da fare in linea.

+1

Ciò richiederebbe che le date siano uguali anche per le quali la risposta accettata imposta il tempo su entrambi allo stesso valore prima di confrontarle. – owencm

+0

Ah grazie per questo @owencm, risolto ora cambiando 'toString' in' toDateString'. – vpontis

Problemi correlati