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
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:00mktime()– Crea un timestamp Unix per una data e un'ora specificate.Nota:echo mktime(14, 30, 0, 10, 25, 2023); // Outputs: 1698237000mktime()si basa sul fuso orario predefinito del server. Per risultati riproducibili, imposta esplicitamente un fuso orario usandodate_default_timezone_set()oDateTimeZone.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 tomorrowtime()– Restituisce il timestamp Unix corrente.echo time(); // Outputs: current timestampDateTime&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: 29L'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:
- Preferisci gli oggetti
DateTimeeDateTimeImmutablerispetto alle funzioni procedurali per una maggiore leggibilità e una gestione integrata dei fusi orari. - Imposta sempre un fuso orario esplicito usando
DateTimeZoneodate_default_timezone_set()per evitare spostamenti inattesi durante l'ora legale o le migrazioni del server. - Convalida le date analizzate usando
DateTime::getLastErrors()per rilevare input non validi tempestivamente ed evitare errori silenziosi. - 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.