Eliminato
Eliminato
In questa funzione:
Tutto funziona correttamente tranne il primo case, non viene letto affatto, mi legge direttamente "0 secondi fa", cioè il secondo case. Come mai?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ù di '. floor($timelapse / 31557600) .' anni '. $modulus .'fa';
break;
}
$date .='</span>';
return $date;
}
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.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.
Cosa potrà mai accadere?
![]()
Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
Lavori e Lavoretti
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?
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!!!!!
Dato che non conosco a fatto le classi, potresti spiegarmi il punto 3...quali oggetti devo costruire?Originariamente inviato da Virus_101
3- costruire i 2 oggetti data
esempio veloce
Ora hai il gap in secondi e puoi ricalcolarlo come ti pare basta dividere per 60 60 60 24 etc.....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 ;
Fatal error: Class 'date' not found in /home/name/public_html/prova.php on line 5Originariamente inviato da Virus_101
Ora hai il gap in secondi e puoi ricalcolarlo come ti pare basta dividere per 60 60 60 24 etc.....
Devo istanziare la classe?
hai ragione dateTime::createFromFormat( ... )
Ho provato a fare cosi:Originariamente inviato da Virus_101
hai ragione dateTime::createFromFormat( ... )
Ma: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 ;
?>
Fatal error: Call to undefined method DateTime::createFromFormat() in /home/name/public_html/prova.php on line 5