Gestione date orari (intro)

Lavorando in PHP e in MYSQL ci imbattiamo in date dai formati più disparati.

gg/mm/aaaa data italiana
mm/gg/aaaa data inglese UNIX
aaaa/mm/gg data MYSQL

E' difficile districarsi tra tutte questi formati ed a volte abbiamo bisogno di capire con che tipo di data stiamo lavorando. Quel che dobbiamo sapere per lavorare con le date è che quasi tutte le funzioni PHP lavorano con date in formato UNIX.
Se quindi dobbiamo eseguire dei calcoli o dobbiamo manipolare in qualche modo le date, nella maggior parte dei casi, dobbiamo far sì che queste vengano prima trasformate in formato UNIX e poi possiamo finalmente continuare il nostro lavoro.

Un modo per controllare il formato di una data potrebbe essere questo mostrato qui di seguito. In questo caso viene usata una funzione personale perchè le istruzioni da usare per il controllo sono numerose e creerebbero confusione nello script da usare.

Ecco come ho fatto:
intanto mi sono creato delle date in diverso formato ed alcune di loro anche sbagliate

  • divido la data in tutte le sue parti usando la funzione PHP preg_split() ed un pattern che usa tutti i possibili caratteri delimitatori usati per una data
  • controllo se il primo elemento è di quattro caratteri, tipico formato usato in SQL
  • in questo caso verifico se la data è corretta usando la funzione PHP checkdate()
  • altrimenti eseguo tramite la funzione PHP checkdate() un controllo su due combinazioni delle parti della data
  • se il test viene superato con entrambe le combinazioni mi trovo di fronte ad una data con giorno e mese minori o uguali a 12 (12 dic 2000 oppure dic 12 2000) da me denominato "incerto"
  • altrimenti inizio altri due test con diverse combinazioni
  • se viene superato il primo di questi due test la data è nel formato UNIX
  • se viene superato il secondo la data è in formato ITA o comunque europeo
  • se tutti i test falliscono la data non è valida (es 30 feb 2000)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function verify_data($data){
    
$data_parts preg_split('/[-\.\/: ]/'$data);
    if (
strlen($data_parts[0]) == 4) {
        if(
checkdate($data_parts[1], $data_parts[2], $data_parts[0])){
            return 
"Per " $data ": Data in formato SQL";
        } else {
            return 
"Per " $data ": Data non valida in formato SQL";
        }
    } else {
        if(
checkdate($data_parts[0], $data_parts[1], $data_parts[2]) && checkdate($data_parts[1], $data_parts[0], $data_parts[2])){
            return 
"Per " $data ": Formato data incerto";
        } elseif(
checkdate($data_parts[0], $data_parts[1], $data_parts[2])){
            return 
"Per " $data ": Formato data UNIX";
        } elseif(
checkdate($data_parts[1], $data_parts[0], $data_parts[2])){
            return 
"Per " $data ": Formato data ITA";
        } else {
            return 
"Per " $data ": Data non valida";
        }
    }
}
?>

La funzione viene così richiamata per ogni data da verificare

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$data_1 
"24/01/2001";
$data_2 "31/02/2001";
$data_3 "07/01/2001";
$data_4 "01/07/2001";
$data_5 "03/15/2001";
$data_6 "15/03/2001";
$data_7 "2001/02/22";
$data_8 "2001/02/30";
echo 
verify_data($data_1) . "<br />\n";
echo 
verify_data($data_2) . "<br />\n";
echo 
verify_data($data_3) . "<br />\n";
echo 
verify_data($data_4) . "<br />\n";
echo 
verify_data($data_5) . "<br />\n";
echo 
verify_data($data_6) . "<br />\n";
echo 
verify_data($data_7) . "<br />\n";
echo 
verify_data($data_8) . "<br />\n";
?>

Questi sono dei possibili risultati ottenuti con le date che ho preso come esempi

Per 24/01/2001: Formato data ITA
Per 31/02/2001: Data non valida
Per 07/01/2001: Formato data incerto
Per 01/07/2001: Formato data incerto
Per 03/15/2001: Formato data UNIX
Per 15/03/2001: Formato data ITA
Per 2001/02/22: Data in formato SQL
Per 2001/02/30: Data non valida in formato SQL

La tabella mostrata in questa finestra elenca i codici che possono essere contenuti in una stringa di formattazione per la data

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum