Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Switch Case

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    190

    Switch Case

    Eliminato

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    190
    In questa funzione:
    Codice PHP:
    /* -- Funzione per Determinare il Tempo -- */
    function formatdate($timestamp
    {
        
    $hour date('H.i:s' $timestamp);
        
    $mesi = array(1=>'01''02''03''04''05''06''07''08''09''10''11''12');
        list(
    $giorno,$mese,$anno) = explode('-',date('j-n-Y' $timestamp));
        
    $date $giorno .'-'$mesi[$mese] .'-'$anno .', '$hour .' <span>| ';
        
    /* -- Determinare quanto Tempo Fa è stata Caricate l'Immagine o Commento -- */
        
    $timelapse time() - $timestamp;
        switch (
    $timelapse
        {
        case  (
    $timelapse 10) : $date .= 'Pochi secondi fa';
            break;
        case  ((
    $timelapse >= 10) && ($timelapse <= 60)) : $date .= $timelapse ' secondi fa';
            break;
        case ((
    $timelapse >= 60) && ($timelapse <= 3600)): $date .= ceil($timelapse 60) .' minuti fa';
            break;
        case ((
    $timelapse 3600) && ($timelapse 7200)): $date .= "Un' ora fa";
            break;
        case ((
    $timelapse 7200) && ($timelapse 86400)): $date .= ceil($timelapse 3600) .' ore fa';
            break;
        case ((
    $timelapse >= 86400) && ($timelapse 172800)): $date .= 'Ieri';
            break;
        case ((
    $timelapse >= 172800) && ($timelapse 864000)): $date .= ceil($timelapse 86400) .' giorni fa';
            break;
        case ((
    $timelapse >= 864000) && ($timelapse 3024000)): $date .= ceil($timelapse 604800) .' settimane fa';
            break;
        case ((
    $timelapse >= 3024000) && ($timelapse 47336400)): $date .= ceil($timelapse 2629800) .' mesi fa';
            break;
        case ((
    $timelapse >= 47336400) && ($timelapse 63115200)): $date .= 'Meno di 2 anni fa';
            break;
        case  (
    $timelapse >= 63115200):
            (
    $timelapse 31557600 15778800) ? $modulus '' $modulus 'e mezzo ';
            
    $date .= 'Pi&ugrave; di 'floor($timelapse 31557600) .' anni '$modulus .'fa';
            break;
        }
        
    $date .='</span>';
        return 
    $date;

    Tutto funziona correttamente tranne il primo case, non viene letto affatto, mi legge direttamente "0 secondi fa", cioè il secondo case. Come mai?

  3. #3
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Leggi http://it2.php.net/manual/en/control...res.switch.php

    Utilizzi lo switch in modo sbagliato. Nei case deve esserci un valore costante non delle condizioni. Questo normalemnte ma PHP, come sempre fin troppo generoso, permette le sue aberrazioni linguistiche:

    The case expression may be any expression that evaluates to a simple type, that is, integer or floating-point numbers and strings. Arrays or objects cannot be used here unless they are dereferenced to a simple type.
    Le tue espressioni case producono un booleano che, per quello che è il funzionamento dell'istruzione switch, genera un confronto lasco di uguaglianza fra $timelapse che è un int ed il risultato booleano dell'espressione nel case.

    Cosa potrà mai accadere?

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    190
    Originariamente inviato da Grino
    Leggi http://it2.php.net/manual/en/control...res.switch.php

    Utilizzi lo switch in modo sbagliato. Nei case deve esserci un valore costante non delle condizioni. Questo normalemnte ma PHP, come sempre fin troppo generoso, permette le sue aberrazioni linguistiche:
    Le tue espressioni case producono un booleano che, per quello che è il funzionamento dell'istruzione switch, genera un confronto lasco di uguaglianza fra $timelapse che è un int ed il risultato booleano dell'espressione nel case.

    Cosa potrà mai accadere?


    mmmmm, non so, cosa accadrebbe?

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    STIAMO SCHERZANDO ?=??????

    Usare un date ddiff fa schifo ?????

    1- buttare via tutto quell'acrocchio di codice inguardabile
    2- usare la classe dateTime http://php.net/manual/en/book.datetime.php

    3- costruire i 2 oggetti data
    4- calcolare il gap
    5- impostare un array con le etichette
    6- eseguire il conteggio per valutare l'etichetta da usare
    7- stampare il risultato!!!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    190
    Originariamente inviato da Virus_101
    3- costruire i 2 oggetti data
    Dato che non conosco a fatto le classi, potresti spiegarmi il punto 3...quali oggetti devo costruire?

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    esempio veloce

    Codice PHP:

    $unixFormat 
    "Y-m-d- H:i:s" ;

    $dateFrom date::createFromFormat($format,$dataDaDbOQuelloCheSiaMaCMQDataUnix1) ;
    $dateTo    date::createFromFormat($format,$dataDaDbOQuelloCheSiaMaCMQDataUnix2) ;

    var_dump($dateFrom) ;

    $dateGap $dateTo->getTimestamp() - $dateFrom->getTimestamp() ;

    echo 
    $dateGap 
    Ora hai il gap in secondi e puoi ricalcolarlo come ti pare basta dividere per 60 60 60 24 etc.....

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    190
    Originariamente inviato da Virus_101
    Ora hai il gap in secondi e puoi ricalcolarlo come ti pare basta dividere per 60 60 60 24 etc.....
    Fatal error: Class 'date' not found in /home/name/public_html/prova.php on line 5

    Devo istanziare la classe?

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    hai ragione dateTime::createFromFormat( ... )

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    190
    Originariamente inviato da Virus_101
    hai ragione dateTime::createFromFormat( ... )
    Ho provato a fare cosi:
    Codice PHP:
    <?php

        $format 
    "Y-m-d- H:i:s" ;
        
        
    $dateFrom dateTime::createFromFormat ($format"2012-06-01- 14:05:55") ;
        
    $dateTo   dateTime::createFromFormat ($format"2012-06-01- 17:05:55") ;
        
        
    var_dump($dateFrom) ;

        
    $dateGap $dateTo->getTimestamp() - $dateFrom->getTimestamp() ;

        echo 
    $dateGap ;

    ?>
    Ma:

    Fatal error: Call to undefined method DateTime::createFromFormat() in /home/name/public_html/prova.php on line 5

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.