W3docs

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|false

dove $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:00

Come 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?

php— editable, runs on the server

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-01

Gestione 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:

  1. Sanifica e valida sempre l'input dell'utente: Poiché la funzione strtotime accetta l'input dell'utente come stringa, è importante assicurarsi che l'input sia pulito e sicuro da utilizzare. Puoi usare funzioni come trim, strip_tags, htmlspecialchars ed espressioni regolari per filtrare i caratteri indesiderati e prevenire attacchi di iniezione.
  2. 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 come date, gmdate, DateTime, DateTimeImmutable e DateTimeZone.
  3. Testa ed esegui il debug del codice: Per assicurarti che la funzione strtotime funzioni come previsto, dovresti testarla con varie stringhe di input, casi limite e scenari, e verificare l'output rispetto alle tue aspettative. Puoi usare strumenti come var_dump, print_r e assert per eseguire il debug del codice e rilevare gli errori.
  4. Considera l'utilizzo di librerie alternative per date e orari: Sebbene la funzione strtotime sia 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, come Carbon o Chronos, 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];

Pratica

Pratica
Qual è lo scopo della funzione 'strtotime' in PHP?
Qual è lo scopo della funzione 'strtotime' in PHP?
Was this page helpful?