Esercizio in PHP sugli archivi di testo (.txt)

ESERCIZIO IN PHP SUI
FILE (si legge Fail) (archivi) DI TESTO


Una società di recupero crediti a Lodi necessita di una procedura informatica, che consenta di registrare i dati dei clienti e delle scadenze, entro le quali, gli stessi devono effettuare i pagamenti.

Questa procedura verrà realizzata dalla classe  4 A Mercurio.
Il software deve prevedere la registrazione anagrafica dei clienti (i campi relativi a:
Nome, cognome, indirizzo, cap, città, codice fiscale, email, cell, tel. fisso, scadenza pagamenti e importi pagamenti).
La registrazione su un secondo file (archivio) dei pagamenti effettuati (codice fiscale cliente, data effettivo pagamento, importo del pagamento con la morosità de tassa del 10% e tipo di pagamento)

Il programma deve consentire all’impiegato della società di verificare giornalmente l’elenco
delle persone da contattare che sono in morosità da 7 giorni.
Se il cliente ha pagato l’importo dovuto entro la data di scadenza non deve versare nessuna
maggiorazione (morosità) altrimenti sul secondo file (archivio) la registrazione dovrà prevedere l’importo maggiorato.

Il programma  deve essere prodotto sotto forma di sito, utilizzando uno dei 5000 templates in possesso
della classe.

Primo esempio del calcolo tra due date

In questo esempio vedremo come calcolare e mostrare i giorni che separano due date.
Supponiamo di avere le date nel formato GG/MM/AAAA.
$dal="22/10/2006"
$al="23/11/2007";
$date_from_parts
= explode('/', $dal);
$date_to_parts = explode('/', $al);
$
ts_from
= mktime(0, 0, 0, $date_from_parts[1], $date_from_parts[0],
$date_from_parts[2]);
$ts_to = mktime(0, 0, 0, $date_to_parts[1],
$date_to_parts[0], $date_to_parts[2]);
for ($x = $ts_from; $x <=
$ts_to; $x += 86400){
$days[] = date('d/m/Y', $x);
}
echo
"<br><br>giorni di soggiorno:<br>";
for
($i = 0; $i <= count($days)-1; $i++){  
//$i=0 $i<= non vanno bene perche il primo giorno e l'ultimo sono
ok
echo $days[$i]."<br>";
}
echo "<br>totale
giorni soggiorno: ".count($days);
SECONDO ESEMPIO CALCOLO TRA DUE DATE

Differenza tra date in PHP: creiamo la funzione DateDiff

Il PHP non dispone nativamente della funzione datediff, funzione predefinita dell'ASP (VBScript) che permette di calcolare la differenza tra due date.
Questo tipo di funzione è molto utile per stabilire il tempo trascorso, ad esempio, da una data del passato e la data odierna, stabilendo l'intervallo temporale secondo le proprie esigenze, ad esempio in anni, mesi, settimane, giorni, ore, minuti, secondi, e cosi via.
La funzione personalizzata che creeremo si chiamerà proprio datediff ed accetterà tre parametri:
datediff(tipo_intervallo, data_partenza, data_finale)
Il primo parametro ci permetterà di specificare, secondo delle convenzioni che stabiliremo a priori, se la differenza tra le date dev'essere calcolata in anni, mesi, settimane, giorni, dato che è difficile avere l'esigenza di calcolare un intervallo tra date espresso in ore, minuti o secondi.
Il secondo parametro permette di specificare la data di partenza (ad esempio la nostra data di nascita), mentre il terzo parametro accetterà la data finale (ad esempio la data di oggi).
Vediamo il codice della nostra funzione personalizzata datediff in PHP:
<?PHP
    function datediff($tipo, $partenza, $fine)
    {
        switch ($tipo)
        {
            case "A" : $tipo = 365;
            break;
            case "M" : $tipo = (365 / 12);
            break;
            case "S" : $tipo = (365 / 52);
            break;
            case "G" : $tipo = 1;
            break;
        }
        $arr_partenza = explode("/", $partenza);
        $partenza_gg = $arr_partenza[0];
        $partenza_mm = $arr_partenza[1];
        $partenza_aa = $arr_partenza[2];
        $arr_fine = explode("/", $fine);
        $fine_gg = $arr_fine[0];
        $fine_mm = $arr_fine[1];
        $fine_aa = $arr_fine[2];
        $date_diff = mktime(12, 0, 0, $fine_mm, $fine_gg, $fine_aa) - mktime(12, 0, 0, $partenza_mm, $partenza_gg, $partenza_aa);
        $date_diff  = floor(($date_diff / 60 / 60 / 24) / $tipo);
        return $date_diff;
    }
?>
COMMENTIAMOLA

Creiamo la funzione e prevediamo i parametri che deve accettare; effettuiamo dei calcoli in base al tipo di intervallo scelto, in modo da ricevere il valore numerico richiesto; dividiamo le due date in array di stringa, in funzione del carattere "/", e recuperiamo per entrambe giorno, mese ed anno.
A questo punto creiamo il timestamp della data finale, sottraendo il timestamp di quella di partenza: in partenza abbiamo due stringhe che formano le date che ci interessano, ma al fine di effettuare una sottrazione, dobbiamo disporre di due numeri; ecco che trasformiamo in timestamp le date, opportunamente divise in elementi quali giorno, mese ed anno.
Arrotondiamo quindi il risultato, dividendolo prima in modo da ottenere il numero di giorni, quindi dividendolo per il tipo di intervallo specificato.
Possiamo naturalmente potenziarla con dei controlli che prevedono che il tipo di intervallo non deve essere diverso diverso da quelli predefiniti e che le date siano passate in formato corretto.

Le convenzioni che useremo per identificare il tipo di intervallo da calcolare sono le seguenti:
A - calcolo differenza in anni.
M - calcolo differenza in mesi.
S - calcolo differenza in settimane.
G - calcolo differenza in giorni.
Entrambe le date, quella di partenza e quella finale, accettano il formato data gg/mm/aaaa.
Salviamo il codice nel file datediff.php ed eseguiamo sul nostro server Web personale con supporto di PHP.
Facciamo un esempio. Calcoliamo in anni la differenza tra la nostra data di nascita ed oggi, per capire quanti anni abbiamo:
<?PHP
 echo datediff("A", "12/04/1978", "11/12/2009");
?>
Restituisce 31.

TERZO ESEMPIO CALCOLO TRA DUE DATE
function datediff($data){
$pezzi=explode("/",$data);
$giorno=$pezzi[0];
$mese=$pezzi[1];
$anno=$pezzi[2];
$giornoO = date("j");
$meseO = date("n");
$annoO = date("Y");
$dateDiff = mktime(12,0,0,$meseO,$giornoO,$annoO) - mktime(12,0,0,$mese,$giorno,$anno);
$dateDiff  = floor($dateDiff/60/60/24);
return $dateDiff;
}
?>
Un esempio di utilizzo potrebbe essere
$giorni=datediff("01/10/2006");
fonte: Luca Ruggiero

Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)