Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [php & mysql] problema confronto orari

    Ho un problemino, forse banale, dal quale non riesco a uscire...

    NECESSITA'
    Confrontare (tramite sottrazione) due orari per ricavare il numero di minuti trascorsi.

    SPECIFICHE
    - Il primo orario ($CheckUltimo) è salvato nel database in un campo DATETIME.
    - Il secondo orario ($CheckAdesso) è la data/ora attuale ricavata direttamente da php.
    - Devo ottenere il numero di minuti *primi* risultante da $CheckAdesso - $CheckUltimo.
    - Eseguita una serie di operazioni sul risultato in minuti devo RI-SALVARE nel database, sovrascrivendo $CheckUltimo con $CheckAdesso (questo immagino di poterlo fare tranquillamente con NOW() nella query mysql).

    Devo usare anche la data, perchè il primo parametro potrebbe essere prima della mezzanotte e il secondo potrebbe essere successivo.

    Se non ho capito male la funzione php time() restituisce il numero di SECONDI trascorsi dall'inizio dell'era UNIX. Avevo quindi pensato di cavarmela impostando: $CheckAdesso = time();

    Se non ho capito male la funzione strtotime() dovrebbe convertire la data/ora estratta da mysql (sotto forma di YYYY-MM-DD HH-mm-ss) nello stesso formato numerico di secondi trascorsi dall'inizio dell'era unix. Pensavo quindi di cavarmela così: $CheckUltimo = strtotime($rs['ULTIMOCHECK']); ... laddove $rs['ULTIMOCHECK'] è parte del fetch array estratto dalla tabella in cui è salvato l'orario.

    In teoria, quindi, dovrei ottenere due numeri confrontabili tramite sottrazione, tipo:
    $TempoTrascorso = $CheckAdesso - $CheckUltimo;

    Invece nada, appena provo a visualizzare $TempoTrascorso con un banalissimo echo ottengo risultati del tutto incongruenti.

    Qualcuno mi può spiegare cortesemente cosa non ho capito nei vari passaggi che ho dato per scontati? Grazie mille


  2. #2
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    Io solitamente uso:
    int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )
    ...altri 5 anni di purga...

  3. #3
    Sì, ma mktime() prende gli argomenti in un ordine differente da quello fornito leggendo un campo DATETIME da mysql, che restituisce i dati come YYYY-MM-DD HH-mm-ss ... mi manca un passaggio intermedio allora.. come passo a mktime() i parametri letti da mysql in modo che siano correttamente formattati per essere trattati nel giusto ordine e avere quindi un timestamp attendibile?.

  4. #4
    Spiego meglio (spero)

    Supponiamo che questo sia il datetime estratto da mysql ($rs è il fetch array):

    $UltimoCheck = $rs['ULTIMOCHECK'];
    In teoria questa sarà una stringa nel formato "YYYY-MM-DD HH-mm-ss", giusto?

    Per trattarla con mktime() e avere il timestamp unix in *secondi* dovrei fare una cosa di questo tipo:

    $TSunix = mktime($ORE,$MINUTI,$SECONDI,$MESE,$GIORNO,$ANNO);

    La domanda è:

    Come estraggo da $UltimoCheck le variabili $ORE,$MINUTI,$SECONDI,$MESE,$GIORNO,$ANNO da usare in mketime() ?

  5. #5
    estrai direttamente il timestamp unix senza usare mktime()

    select *, unix_timestamp(campo_datetime) as tuo_Alias from .... etc

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

  6. #6
    Scusa, non mi è chiara la sintassi della query... per tuo_Alias cosa intendi?

  7. #7
    Originariamente inviato da beric72
    Scusa, non mi è chiara la sintassi della query... per tuo_Alias cosa intendi?
    intendo dire un tuo alias, alias di tuo gradimento. Un alias e' uno pseudonimo per un campo (in questo caso e' un campo) su cui "infilare" il risultato della funzione unix_timestamp(). In pratica avrai un campo in piu' rispetto a quelli presenti nella tabella.

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

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.