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

    mktime problema nella differenza

    Ho un piccolo problema con mktime...

    ho $end: 04:00:00
    e ho $begin: 01:00:00.

    Devo calcolare questa differenza e faccio:

    $tot_diur=mktime($end)-mktime($begin)

    stampando date("H:i", $tot_diur) ottengo 03:00, quindi è corretto, ma ho anche questo warning:

    A non well formed numeric value encountered

    perchè?

  2. #2
    il formato di mktime è il seguente:

    mktime(ore,minuti,secondi,mese,giorno,anno)

    Non puoi eseguire un mktime mettendo una sola variabile.

    Se poi consideri che 04:00:00 è una stringa, mentre mktime accetta solo il tipo int è ovvio che non funziona

  3. #3
    il problema è che io devo fare una differenza tra due orari, senza avere la data.
    Come posso fare?

  4. #4
    Originariamente inviato da mcphisto79
    il problema è che io devo fare una differenza tra due orari, senza avere la data.
    Come posso fare?
    eccoti un conta ore-minuti (start - end nella stessa giornata.... occhio) la data e' tanto per dare dei valori a mktime che pero' non verranno utilizzati.

    codice:
    $start = '08:10:00';
    $end = '14:30:00';
    
    Function contaOreMinuti($start, $end) {
    
       $part = explode(":", $start);
       $arr = explode(":", $end);
    
       $diff = mktime($arr[0], $arr[1], 0,1,1,2008) - mktime($part[0], $part[1],0,1,1,2008);
    
       $tempo = floor($diff / (60*60)).":".(($diff / 60) % 60);
    
       return $tempo;
    }
    
    echo "Inizio ore: $start - Fine ore: $end 
    Durata: ";
    echo contaOreMinuti($start,$end);

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

  5. #5
    metti 0 per giorno mese e anno

  6. #6
    Grazie.
    Avevo fatto una funzione anche io, ma avevo fattio un po' di confusione con mktime...

    comunque l'ho modificata così se l'orario finale è minore di quello iniziale, il che si verifica per esempio se un turno inizia il giorno prima alle 23 e finisce il giorno dopo alle 04. In questo caso infatti avremmo -19 ore. Con la modifica si ottiene la differenza corretta.

    Ultima domandina: il risultato viene tipo (per quattro ore e tre minuti) 4:3. Come faccio a stampare 04:03, per maggior chiarezza?

    codice:
    Function findDiff($start, $end) {
    
    $part = explode(":", $start);
    $arr = explode(":", $end);
          
    if ($start<$end) {$diff = mktime($arr[0], $arr[1], 0,0,0,0) - mktime($part[0], $part[1],0,0,0,0);}
    if ($end<$start) {$diff = mktime($arr[0], $arr[1], 0,0,1,0) - mktime($part[0], $part[1],0,0,0,0);}                 
    
    $tempo = floor($diff / (60*60)).":".(($diff / 60) % 60);
    
    return $tempo;
    }

  7. #7
    Originariamente inviato da mcphisto79
    Ultima domandina: il risultato viene tipo (per quattro ore e tre minuti) 4:3. Come faccio a stampare 04:03, per maggior chiarezza?
    usa sprintf()

    codice:
       $ore = floor($diff / (60*60));
       $minuti = ($diff / 60) % 60;
    
       return $tempo = sprintf("%02d:%02d", $ore, $minuti);

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

  8. #8

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.