W3docs

Calendario PHP

Impara a lavorare con date, orari e calendari in PHP usando date(), mktime(), strtotime() e la classe DateTime, con esempi e best practice.

Introduzione

Questo capitolo illustra come lavorare con date, orari e calendari in PHP. Imparerai le principali funzioni per data e ora, come costruire una griglia di calendario per un determinato mese e le best practice per mantenere la logica delle date corretta tra i fusi orari. Ogni esempio è breve ed eseguibile, quindi puoi incollarlo direttamente in un file PHP.

Per un'analisi più approfondita dei singoli argomenti, consulta i capitoli correlati su Data e ora in PHP, la funzione date() e i Fusi orari PHP.

Comprendere le funzioni PHP per data e ora

PHP offre un solido insieme di funzioni per data e ora per formattare, calcolare e manipolare date, orari e fusi orari. Queste funzioni sono essenziali per le applicazioni che devono gestire dati temporali come scheduler, sistemi di prenotazione e, naturalmente, calendari.

PHP include anche una Calendar Extension separata (cal_days_in_month(), jdtogregorian() e simili) per la conversione tra sistemi di calendario come Giuliano, Gregoriano ed Ebraico. Le due vengono spesso confuse: la Calendar Extension converte tra sistemi, mentre le funzioni per data e ora descritte di seguito gestiscono la formattazione e l'aritmetica quotidiana. La maggior parte dei task di tipo "costruisci un calendario" richiede solo le funzioni per data e ora.

Funzioni PHP comuni per data e ora

  1. date() – Formatta una stringa di data e ora locale in base a un formato specificato.
    echo date("Y-m-d H:i:s"); // Outputs: 2023-10-25 14:30:00
  2. mktime() – Crea un timestamp Unix per una data e un'ora specificate.
    echo mktime(14, 30, 0, 10, 25, 2023); // Outputs: 1698237000
    Nota: mktime() si basa sul fuso orario predefinito del server. Per risultati riproducibili, imposta esplicitamente un fuso orario usando date_default_timezone_set() o DateTimeZone.
  3. strtotime() – Analizza una stringa testuale datetime in inglese e la converte in un timestamp Unix.
    echo strtotime("now"); // Outputs: current timestamp
    echo strtotime("+1 day"); // Outputs: timestamp for tomorrow
  4. time() – Restituisce il timestamp Unix corrente.
    echo time(); // Outputs: current timestamp
  5. DateTime & DateTimeImmutable – Classi orientate agli oggetti per una manipolazione e formattazione di date e orari più sicura.
    $dt = new DateTime('2023-10-25 14:30:00');
    echo $dt->format('Y-m-d H:i:s');

Oltre a queste funzioni, ne esistono molte altre per manipolare date e orari. Capire come funzionano ti consente di creare applicazioni PHP efficienti e affidabili.

Quanti giorni ha un mese?

Un compito comune nei calendari è determinare il numero di giorni in un dato mese, che varia e dipende dagli anni bisestili per febbraio. Esistono due modi affidabili per farlo:

// Using the Calendar Extension (requires ext-calendar)
echo cal_days_in_month(CAL_GREGORIAN, 2, 2024); // Outputs: 29 (2024 is a leap year)

// Using date() with the 't' format character (no extension needed)
echo date('t', mktime(0, 0, 0, 2, 1, 2024)); // Outputs: 29

L'approccio date('t', ...) è portabile perché non dipende dall'installazione della Calendar Extension.

Costruire un semplice calendario per un mese

Mettendo insieme i pezzi, ecco come stampare i giorni di un mese allineati sotto le colonne dei giorni della settimana. Troviamo il primo giorno della settimana del mese con date('w', ...) (0 = domenica) e il conteggio dei giorni con date('t', ...):

$month = 10;
$year  = 2023;

$firstDayTimestamp = mktime(0, 0, 0, $month, 1, $year);
$daysInMonth       = (int) date('t', $firstDayTimestamp);
$startWeekday      = (int) date('w', $firstDayTimestamp); // 0 = Sunday

echo "Su Mo Tu We Th Fr Sa\n";

// Pad the first row so day 1 lands under the correct weekday.
echo str_repeat('   ', $startWeekday);

for ($day = 1; $day <= $daysInMonth; $day++) {
    printf('%2d ', $day);
    // Break to a new line after Saturday.
    if (($startWeekday + $day) % 7 === 0) {
        echo "\n";
    }
}
echo "\n";

Questo ciclo stampa ottobre 2023 come griglia di calendario. Per saperne di più sul ciclo utilizzato qui, consulta Cicli PHP.

Best practice per l'uso delle funzioni PHP di data e ora

Quando si utilizzano le funzioni PHP per data e ora, è importante seguire le best practice per garantire che le applicazioni siano efficienti ed efficaci. Ecco alcuni suggerimenti da tenere a mente:

  1. Preferisci gli oggetti DateTime e DateTimeImmutable rispetto alle funzioni procedurali per una maggiore leggibilità e una gestione integrata dei fusi orari.
  2. Imposta sempre un fuso orario esplicito usando DateTimeZone o date_default_timezone_set() per evitare spostamenti inattesi durante l'ora legale o le migrazioni del server.
  3. Convalida le date analizzate usando DateTime::getLastErrors() per rilevare input non validi tempestivamente ed evitare errori silenziosi.
  4. Memorizza nella cache i timestamp calcolati o le stringhe formattate in cicli stretti per ridurre il sovraccarico delle chiamate di funzione.

Conclusione

Le funzioni PHP per data e ora sono una parte essenziale di qualsiasi applicazione PHP che deve gestire dati temporali. Comprendendo come funzionano queste funzioni e seguendo le best practice, puoi sviluppare applicazioni affidabili ed efficienti.

Pratica

Pratica
In PHP, quali metodi sono più comunemente usati per creare un calendario?
In PHP, quali metodi sono più comunemente usati per creare un calendario?
Was this page helpful?