La funzione date_get_last_errors() di PHP
Scopri come usare date_get_last_errors() in PHP per recuperare avvisi ed errori relativi alle operazioni su date e orari.
Hai mai avuto problemi con errori legati alle date nel tuo codice PHP? Sei nel posto giusto. La funzione date_get_last_errors() di PHP è qui per aiutarti.
In questo articolo approfondiremo come funziona la funzione date_get_last_errors(), i suoi parametri e come puoi usarla per risolvere i problemi relativi alle date nel tuo codice PHP.
Cos'è la funzione date_get_last_errors()?
La funzione date_get_last_errors() è una funzione built-in di PHP (disponibile dal PHP 5.2.0) che consente di recuperare informazioni sull'ultimo errore o avviso relativo alle date che si è verificato. Restituisce un array associativo contenente warning_count, warnings, error_count e errors, che forniscono i codici specifici e le descrizioni testuali di cosa è andato storto durante l'ultima operazione su data/ora.
Come usare date_get_last_errors()
Per usare la funzione date_get_last_errors(), la chiami dopo che una funzione di creazione o modifica di date fallisce. Per codice pronto per la produzione, dovresti sempre verificare che la funzione di data abbia restituito false prima di recuperare i dettagli dell'errore. Ecco un esempio:
In questo esempio, stiamo cercando di creare un object data dalla stringa '2022-13-01', che è un valore di data non valido (il mese 13 non esiste). Dopo aver verificato che date_create_from_format() ha restituito false, chiamiamo date_get_last_errors() e stampiamo l'array restituito usando print_r().
L'output di questo codice sarà:
Array
(
[warning_count] => 1
[warnings] => Array
(
[10] => The parsed date was invalid
)
[error_count] => 0
[errors] => Array
(
)
)Come puoi vedere, l'array restituito distingue tra avvisi ed errori:
- Gli Errori indicano che l'input non ha potuto essere analizzato affatto (ad esempio, un carattere inatteso o un formato che non corrisponde alla stringa).
- Gli Avvisi indicano che la stringa è stata analizzata, ma il risultato è discutibile — come un componente fuori range. Il mese
13non esiste, quindi PHP lo avvolge o lo rifiuta e solleva l'avviso[10] => The parsed date was invalid.
Attenzione: il valore di ritorno quando non ci sono errori
Un errore comune è che il valore di ritorno è cambiato nelle diverse versioni di PHP:
- PHP 5.2 – 8.1: restituisce sempre l'array associativo, con
warning_counteerror_countimpostati a0quando non è andato storto nulla. - PHP 8.2 e successivi: restituisce
false(boolean) quando l'operazione su data precedente non ha prodotto né avvisi né errori.
Ecco esattamente perché dovresti ramificare sul risultato della funzione di data stessa piuttosto che su date_get_last_errors():
<?php
// A valid date — parsing succeeds.
$result = date_create_from_format('Y-m-d', '2022-01-15');
if ($result === false) {
// This branch is skipped because the date is valid.
print_r(date_get_last_errors());
} else {
echo "Parsed successfully: " . $result->format('Y-m-d');
}
?>Output:
Parsed successfully: 2022-01-15Poiché $result è un object DateTime valido, non chiamiamo mai date_get_last_errors() — evitando del tutto la sorpresa dipendente dalla versione tra false e array.
Flusso di lavoro pratico per il debug
Quando si gestisce l'analisi delle date in produzione, segui questo schema per acquisire e registrare i problemi in modo sicuro:
- Chiama la funzione di creazione della data (ad es.,
date_create_from_format()oDateTime::createFromFormat()). - Verifica se il risultato è
false. - Se
false, chiamadate_get_last_errors()per esaminare gli arraywarningseerrors. - Registra o visualizza i codici e i messaggi di avviso/errore specifici per identificare il problema esatto di analisi senza interrompere l'applicazione.
Parametri
La funzione date_get_last_errors() non accetta parametri. Restituisce semplicemente informazioni sull'ultimo errore o avviso relativo alle date che si è verificato (un array associativo, o false su PHP 8.2+ quando non ce ne sono stati).
Equivalente orientato agli oggetti
Se lavori con la classe DateTime invece delle funzioni procedurali, le stesse informazioni sono disponibili tramite il metodo statico DateTime::getLastErrors():
<?php
$result = DateTime::createFromFormat('Y-m-d', 'not-a-date');
if ($result === false) {
print_r(DateTime::getLastErrors());
}
?>Output:
Array
(
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 3
[errors] => Array
(
[0] => A four digit year could not be found
[10] => Not enough data available to satisfy format
)
)In questo caso la stringa non può essere analizzata affatto, quindi i problemi vengono riportati come errori (non avvisi). DateTime::getLastErrors() restituisce la stessa struttura identica di date_get_last_errors() e segue le stesse regole di versione descritte sopra.
Funzioni correlate
date_create_from_format()— analizza una stringa di data secondo un formato esplicito; la funzione i cui errori vengono esaminati qui.date_create()— crea un objectDateTimeda una stringa di data flessibile.checkdate()— valida una data gregoriana prima di tentarne l'analisi.date()— formatta un timestamp una volta che si dispone di una data valida.
Conclusione
La funzione date_get_last_errors() è uno strumento prezioso per qualsiasi sviluppatore PHP che ha bisogno di risolvere errori relativi alle date. Esponendo l'avviso o l'errore specifico che si è verificato durante l'ultima operazione su data/ora, ti consente di eseguire il debug dei problemi di analisi senza interrompere l'applicazione. Ricorda le due abitudini fondamentali: ramifica sempre sul valore di ritorno della funzione di data stessa (false), e tieni conto della modifica introdotta in PHP 8.2+ dove date_get_last_errors() stessa restituisce false quando non è andato storto nulla.