Funzione PHP strtotime: Comprensione del Parsing di Date e Orari
Scopri come usare la funzione strtotime in PHP per convertire stringhe di data e ora in timestamp Unix con esempi pratici.
Nella programmazione PHP, lavorare con date e orari è un'operazione comune che può risultare complessa a causa della varietà di formati e fusi orari utilizzati nei diversi sistemi e applicazioni. La funzione strtotime è uno strumento potente che consente agli sviluppatori di analizzare e manipolare stringhe di data e ora con facilità, ma richiede anche una buona comprensione della sua sintassi e delle opzioni disponibili per evitare errori e risultati inattesi. In questo articolo esploreremo la funzione strtotime e il suo utilizzo in dettaglio, fornendo esempi e suggerimenti che possono aiutarti a migliorare le tue competenze nella programmazione PHP.
Cos'è la Funzione strtotime?
La funzione strtotime è una funzione PHP integrata che converte una rappresentazione testuale di una data e/o ora in un timestamp Unix, ovvero un valore numerico che rappresenta il numero di secondi trascorsi dal 1° gennaio 1970, 00:00:00 UTC (Tempo Coordinato Universale). Il timestamp Unix è un formato ampiamente utilizzato per memorizzare e manipolare date e orari in molti linguaggi di programmazione e sistemi, e consente un facile confronto, calcolo e formattazione di date e orari.
La sintassi della funzione strtotime è la seguente:
Sintassi della funzione strtotime()
<?php
strtotime ( string $time [, int $now = time() ] ) : int|falsedove $time è la stringa di input che contiene la data e/o l'ora da analizzare, e $now è un parametro opzionale che specifica il timestamp di riferimento utilizzato per i calcoli relativi. La funzione restituisce un timestamp Unix se la stringa di input è valida, oppure false se la stringa non può essere analizzata.
Poiché il valore restituito è semplicemente un numero di secondi, si usa quasi sempre strtotime() in combinazione con date() per convertirlo nuovamente in qualcosa di leggibile dall'utente:
<?php
date_default_timezone_set('UTC');
$timestamp = strtotime("2023-03-03");
echo $timestamp; // 1677801600
echo date("Y-m-d H:i:s", $timestamp); // 2023-03-03 00:00:00Come Usare la Funzione strtotime?
La funzione strtotime supporta un'ampia gamma di formati di input e modificatori che possono essere combinati per analizzare varie espressioni di data e ora. Alcuni dei formati e modificatori più comuni sono:
- Formati di data:
YYYY-MM-DD,MM/DD/YYYY,DD-MM-YYYY,YYYY.MM.DD, ecc. - Formati di ora:
HH:MM:SS,HH:MM,H:M:S AM/PM,HH:MM:SS +/-HHMM, ecc. - Offset di fuso orario:
+HHMM,-HHMM,Z, ecc. - Espressioni relative:
now,yesterday,today,tomorrow,last/next day/week/month/year,+/- N days/weeks/months/years,first/last day/weekday/week/month/year of month/year, ecc.
Per usare la funzione strtotime, è necessario passare una stringa che contenga uno o più di questi formati e modificatori, e la funzione tenterà di interpretarli e convertirli in un timestamp Unix. Ecco alcuni esempi:
Come Usare la Funzione strtotime?
Come si può vedere, la funzione strtotime è in grado di gestire vari formati di input ed espressioni relative, ma è importante notare che il comportamento della funzione può variare in base al fuso orario del sistema, alla versione di PHP e alla sintassi e al contesto della stringa di input. Pertanto, si raccomanda di usare la funzione strtotime con cautela e di testare e validare sempre l'output prima di utilizzarlo nel codice in produzione.
Calcoli relativi sulle date
Una delle funzionalità più utili di strtotime() è l'analisi di espressioni relative rispetto a un timestamp di base. Questo rende banale rispondere a domande come "quale sarà la data tra una settimana?" o "il primo giorno del mese prossimo?":
<?php
date_default_timezone_set('UTC');
$base = strtotime("2023-03-03");
echo date("Y-m-d", strtotime("+1 week", $base)); // 2023-03-10
echo date("Y-m-d", strtotime("first day of next month", $base)); // 2023-04-01Gestione del valore di ritorno false
strtotime() restituisce false (non un'eccezione) quando non riesce a interpretare l'input. Nota che false è vagamente uguale a 0, quindi verifica sempre con l'operatore rigoroso === — altrimenti un'analisi fallita potrebbe essere scambiata per l'epoca (1° gennaio 1970):
<?php
$timestamp = strtotime("not a real date");
var_dump($timestamp); // bool(false)
if ($timestamp === false) {
echo "Could not parse the date.";
} else {
echo date("Y-m-d", $timestamp);
}Suggerimenti e Buone Pratiche
Ecco alcuni suggerimenti e buone pratiche da seguire quando si utilizza la funzione strtotime nel codice PHP:
- Sanifica e valida sempre l'input dell'utente: Poiché la funzione
strtotimeaccetta l'input dell'utente come stringa, è importante assicurarsi che l'input sia pulito e sicuro da utilizzare. Puoi usare funzioni cometrim,strip_tags,htmlspecialcharsed espressioni regolari per filtrare i caratteri indesiderati e prevenire attacchi di iniezione. - Usa formati e fusi orari espliciti: Per evitare ambiguità ed errori, si raccomanda di usare formati di data e ora espliciti, come ISO 8601, e specificare esplicitamente il fuso orario, sia come stringa che come oggetto
DateTimeZone. Ciò è possibile usando funzioni comedate,gmdate,DateTime,DateTimeImmutableeDateTimeZone. - Testa ed esegui il debug del codice: Per assicurarti che la funzione
strtotimefunzioni come previsto, dovresti testarla con varie stringhe di input, casi limite e scenari, e verificare l'output rispetto alle tue aspettative. Puoi usare strumenti comevar_dump,print_reassertper eseguire il debug del codice e rilevare gli errori. - Considera l'utilizzo di librerie alternative per date e orari: Sebbene la funzione
strtotimesia uno strumento comodo e potente, presenta alcune limitazioni e particolarità che possono causare problemi in determinate situazioni. Pertanto, potresti voler considerare l'utilizzo di librerie alternative per date e orari, comeCarbonoChronos, che offrono più funzionalità e flessibilità.
Nota sul PHP moderno: Per i nuovi progetti, le classi DateTime e DateTimeImmutable sono fortemente raccomandate rispetto a strtotime grazie a maggiore affidabilità, design orientato agli oggetti e gestione esplicita del fuso orario. Usa strtotime principalmente per il codice legacy o per una semplice analisi di date relative. Consulta date_create e date_modify per gli equivalenti orientati agli oggetti.
Funzioni correlate
date— formatta un timestamp Unix in una stringa leggibile.mktime— costruisce un timestamp dalle singole parti di una data anziché da una stringa.time— restituisce il timestamp Unix corrente.date_create— il modo moderno e orientato agli oggetti per analizzare le date.- PHP Date and Time — panoramica del toolkit PHP per data/ora.
Conclusione
In questo articolo abbiamo esplorato la funzione strtotime in PHP e il suo utilizzo nel parsing e nella manipolazione di stringhe di data e ora. Abbiamo visto come funziona la funzione, quali formati e modificatori supporta e quali suggerimenti e buone pratiche seguire quando la si utilizza nel codice. Applicando questi principi, puoi migliorare le tue competenze nella programmazione PHP e scrivere codice per la gestione delle date più affidabile. Ricorda di validare e sanificare sempre l'input dell'utente, di usare formati e fusi orari espliciti, di testare ed eseguire il debug del codice e di considerare l'utilizzo di librerie alternative se necessario. Buona programmazione!
graph TD;
A[strtotime Function] --> B[Unix timestamp];
B --> C[Date comparison];
B --> D[Date calculation];
B --> E[Date formatting];
C --> F[Equal to];
C --> G[Greater than];
C --> H[Less than];
D --> I[Addition];
D --> J[Subtraction];
E --> K[Textual representation];
E --> L[Numeric representation];