PHP: formattare e visualizzare la data odierna in italiano

Programmazione PHP

Quando utilizziamo le date in un ambiente PHP/MySQL, queste si trovano generalmente in due formati:

  • Y-m-d H:i:s nel database (il formato DATETIME)
  • d/m/Y in HTML, per la visualizzazione

Per cambiare il formato di una data, si passa generalmente attraverso una fase intermedia: il timestamp (l’ora Unix, o Posix time). Il timestamp rappresenta il numero di secondi trascorsi dal 1° gennaio 1970. Si utilizza la funzione strtotime per convertire una data in timestamp, poi la funzione date per convertire il timestamp nel formato desiderato.

<?php
$date = "2020-07-09 13:30:15";
echo date("d/m/Y", strtotime($date));
// Risultato: 09/07/2020
?>

Il problema con questo metodo è che siete limitati nel formato di partenza. In Europa, utilizziamo date nel formato d/m/Y (giorno/mese/anno), mentre la funzione strtotime si aspetta date nel formato americano m/d/Y (mese/giorno/anno).

  • Se il separatore è un trattino (-), la data è considerata europea
  • Se il separatore è una barra (/), la data è considerata americana

Riprendendo il nostro esempio, ma modificando semplicemente il separatore, non funziona più nulla:

<?php
$date = "09/07/2020 13:30:15";
echo date("d/m/Y", strtotime($date));
// Risultato: 07/09/2020 !!!
?>

[Attenzione] Dalla versione PHP 8.1 strftime è obsoleta. DateTime::format() fornisce una sostituzione indipendente dalla localizzazione. IntlDateFormatter::format() fornisce una sostituzione sensibile alla localizzazione.

Esempio:

<?php
$date = "09/07/2020 13:30:15";
$dateTime = DateTime::createFromFormat("d/m/Y H:i:s", $date);
echo $dateTime->format("d/m/Y");
// Risultato: 09/07/2020
?>

La soluzione a questo problema si trova nella classe DateTime. Questa classe permette anch’essa di lavorare sulle date, con la differenza che potete specificare il formato della data di partenza. Le date non saranno più limitate al formato americano.

<?php
class DateUtils {
    public static function formatDate($date, $inputFormat, $outputFormat) {
        $dateTime = DateTime::createFromFormat($inputFormat, $date);
        return $dateTime->format($outputFormat);
    }
}
echo DateUtils::formatDate("09/07/2020 13:30:15", "d/m/Y H:i:s", "d/m/Y");
?>

Visualizzare la data odierna in italiano con PHP

Per visualizzare la data odierna in italiano con PHP, dovete:

  • Definire le informazioni di localizzazione con la funzione setlocale.
  • Definire il fuso orario predefinito con la funzione date_default_timezone_set.
  • Utilizzare la funzione strftime per formattare la data con la configurazione locale.
  • Eventualmente utilizzare utf8_encode per gestire i problemi di accentuazione.

Nota: utf8_encode è necessario solo se non avete dichiarato la codifica da utilizzare nel vostro codice HTML:

<meta charset="utf-8">

Ecco il codice PHP per visualizzare una data in italiano:

<?php
setlocale(LC_TIME, "it_IT.utf8", "it_IT", "Italian_Italy");
date_default_timezone_set("Europe/Rome");
echo utf8_encode(strftime("%A %d %B %Y, %H:%M"));
// Risultato: giovedì 09 luglio 2020, 13:31
?>

Nota: sostituite l’ultima riga con echo strftime('%A %d %B %Y, %H:%M'); se avete dichiarato la codifica nel vostro codice HTML.

Troverete maggiori informazioni riguardo strftime nella documentazione ufficiale PHP.

PHP 8.1: le funzioni strftime e gmstrftime sono obsolete

Le funzioni strftime e gmstrftime formattano un timestamp Unix basato sui parametri regionali correnti definiti con la funzione setlocale().

La funzione setlocale definisce i parametri regionali sul processo PHP, piuttosto che sul thread di lavoro corrente. Questo è problematico quando ci sono più thread di lavoro.

PHP propone delle API di formattazione dell’ora indipendenti e sensibili ai parametri regionali che sono migliori, più ricche e non soffrono di questo difetto. In particolare l’estensione intl e la classe IntlDateFormatter.

<?php
$formatter = new IntlDateFormatter("it_IT", IntlDateFormatter::FULL, IntlDateFormatter::SHORT);
echo $formatter->format(new DateTime());
// Risultato: giovedì 9 luglio 2020, 13:31
?>
<?php
$formatter = new IntlDateFormatter(
    "it_IT",
    IntlDateFormatter::FULL,
    IntlDateFormatter::NONE,
    "Europe/Rome",
    IntlDateFormatter::GREGORIAN,
    "EEEE d MMMM yyyy"
);
echo $formatter->format(new DateTime());
?>

Soluzione

Per una formattazione di data/ora in PHP compatibile con i parametri regionali, utilizzate IntlDateFormatter::format (necessita dell’estensione intl):

In un caso d’uso reale e ideale, l’oggetto IntlDateFormatter viene istanziato una volta in base alle informazioni di localizzazione dell’utente (provenienti da una sessione, un campo del database utenti, ecc.).

<?php
$formatter = new IntlDateFormatter(
    "it_IT",
    IntlDateFormatter::LONG,
    IntlDateFormatter::SHORT,
    "Europe/Rome"
);
echo $formatter->format(new DateTime());
// Risultato: 9 luglio 2020, 13:31
?>

Per una formattazione di data/ora indipendente dai parametri regionali, utilizzate la funzione date() o DateTime::format / DateTimeImmutable::format:

<?php
echo date("d/m/Y H:i:s");
// oppure
echo (new DateTime())->format("d/m/Y H:i:s");
?>

DateTimeImmutable::format può anche formattare un oggetto DateTimeImmutable:

<?php
$date = new DateTimeImmutable("2020-07-09 13:30:15", new DateTimeZone("Europe/Rome"));
echo $date->format("d/m/Y H:i:s");
// Risultato: 09/07/2020 13:30:15
?>
Cat Dimension
Cat Dimension è un gioco di avventura disponibile su Steam: https://store.steampowered.com/app/1839780/Cat_Dimension

Articoli recenti

Commenti recenti

  1. Massimiliano Ferretti su I Commenti

    Mi permetto di aggiungere una mia considerazione personale che ho riportato dall'utilizzo di C#. Personalmente mi piace commentare funzioni e…

  2. Personalmente ritengo che utilizzare git porti sempre dei vantaggi anche per lo sviluppo solo. Già solo la possibilità di fare…

  3. ciao, il link a discord non è piu valido, vorrei utilizzare il materiale che hai pubblicato tempo fa, come faccio?

Itamde è anche una scuola di programmazione online.

Itamde

Impara ciò che desideri, al tuo ritmo

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Potrebbe interessarti anche…

L’intelligenza artificiale entra in ogni pixel

L’intelligenza artificiale entra in ogni pixel

Fino a pochi anni fa, ritoccare una foto significava passare ore su Photoshop, padroneggiando livelli, maschere e curve di regolazione. Nel 2026 tutto è cambiato. Gli strumenti IA per il fotoritocco non si limitano più a proporre filtri automatici: comprendono il...

Come creare il tuo videogioco: i migliori strumenti gratuiti nel 2026

Come creare il tuo videogioco: i migliori strumenti gratuiti nel 2026

L'industria dei videogiochi ha subito un'evoluzione radicale negli ultimi anni, democratizzando un settore un tempo riservato agli studi con budget colossali. Oggi, milioni di giocatori su PC, console, smartphone e tablet consumano quotidianamente giochi creati da...

Rimani aggiornato sulle ultime notizie e novità

Accedi ai contenuti riservati

Scopri il dietro le quinte dei nostri progetti, risorse esclusive e lo stato di avanzamento delle nostre creazioni in tempo reale.

Iscriviti alla newsletter

Ricevi le nostre notizie, le nostre riflessioni creative e le novità dell’atelier direttamente nella tua casella di posta elettronica.

Seguici

Unisciti alla nostra community sui social network per seguire i nostri progetti quotidiani e interagire con noi.