Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Confronto date

  1. #1

    Confronto date

    Ciao a tutti.
    Avrei questo problema.
    Carico dei dati nel db con la data e l'ora corrente.

    Ogni ora faccio partire un task schedulato che deve controllare tutti i dati caricati nel db e verificare quelli che non hanno subito modifiche nell'ora sucessiva alla loro creazione.

    Cosa faccio.

    Ho preso la data registrata nel db in questo modo:

    $ticket_date = date("m j Y g i", $row[1]);

    $mtime1 = explode(" ", $ticket_date);

    $giorno_registrazione = $mtime1[1];
    $mese_registrazione = $mtime1[0];
    $anno_registrazione = $mtime1[2];
    $ora_registrazione = $mtime1[3];
    $minuti_registrazione = $mtime1[4];

    Quindi ho fatto lo stesso con la data corrente:

    $data_corrente = date("m j Y g i");

    $mtime2 = explode(" ", $data_corrente);

    $giorno_corrente = $mtime2[1];
    $mese_corrente = $mtime2[0];
    $anno_corrente = $mtime2[2];
    $ora_corrente = $mtime2[3];
    $minuti_corrente = $mtime2[4];

    A questo punto preparo i valori per fare la differenza utilizzando il mktime:

    $data_registrazione = mktime ($ora_registrazione,$minuti_registrazion
    e,0,$mese_registrazione,$giorno_registra
    zione,$anno_registrazione);

    $data_corrente_modificata = mktime ($ora_corrente,$minuti_corrente,0,$mese_
    corrente,$giorno_corrente,$anno_corrente
    );


    quindi dovrei fare la loro differenza:

    $data_corrente_modificata - $data_registrazione < 2*60*60

    ma forse sono un po stanco e sbaglio la logica della moltiplicazione (2*60*60) perchè non mi esegue il controllo.

    Qualcuno può aiutarmi.

    Grazie.

  2. #2
    Capito ben poco del post. L'unica cosa che mi pare chiara e' che hai una data in UNIX TIMESTAMP messa in un db, la prendi e verifichi se e' passata o meno un'ora ora dalla creazione (un'ora = 60 x 60).

    Prima domanda: come fai a sapere se e' stata modificata?

    Ammesso che saranno problemi tuoi, nella select verifichi immediatamente senza troppi patemi informatici:

    SELECT *, IF(data_db < UNIX_TIMESTAMP - 3600, 1, 0) AS DIFF
    FROM TABELLA

    Ti rendera' 1 se e' gia' passata un'ora oppure 0 se non ancora passata.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Non ho capito bene cosa hai fatto.
    Prima ha trasformatola la data con date e poi la hai riportata al valore iniziale in unixtime con mktime???? Poi parli di un'ora e metti 2*60*60 che sono 2 ore.

    Per ottenere direttamente dall'sql i record con la data di registrazione maggiore di un'ora fa:

    SELECT * FROM TABELLA WHERE DATA_REGISTRAZIONE > ( UNIX_TIMESTAMP() - 3600 )

    Per fare il contrario metti <.

  4. #4
    Ciao.
    Si scusatemi, ho postato il problema in modo non chiaro.
    Comunque grazie, non avevo pensato di filtrare direttamente tramite la query sql.

    Ho fatto cosi e ottengo il risultato.

    Grazie ancora ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.