php - data - twig datetime




Come eseguire il rendering di un oggetto DateTime in un modello Twig (6)

C'è uno strumento symfony2 per visualizzare la data nelle impostazioni locali correnti:

{{ user.createdAt|localeDate }} to have a medium date and no time, in the current locale

{{ user.createdAt|localeDate('long','medium') }} to have a long date and medium time, in the current locale

https://github.com/michelsalib/BCCExtraToolsBundle

Uno dei miei campi in una delle mie entità è una variabile "datetime".

Come posso convertire questo campo in una stringa da renderizzare in un browser?

Ecco uno snippet di codice:

{% for game in games %}
    ...
        <td> {{game.gameTeamIdOne.teamName}} </td>
        <td> {{game.gameTeamIdTwo.teamName}} </td>
        <td> {{game.gameDate}}</td>
    </tr>
{% endfor %}

Ecco la variabile nella mia classe di entità:

/**
 * @var date $gameDate
 *
 * @ORM\Column(name="GAME_DATE", type="datetime", nullable=true)
 */
private $gameDate;

Ed ecco il messaggio di errore che sto ottenendo:

È stata generata un'eccezione durante il rendering di un modello ("Catchable Fatal Error: oggetto della classe DateTime non può essere convertito in stringa in ... \ app \ cache \ dev \ twig \ 9b \ ad \ 58fd3bb1517632badf1fdc7fa4a8.php riga 33" ) in "BeerBundle: Games: gameTable.html.twig" alla riga 10.


Dipende dal formato in cui vuoi che venga mostrata la data.

Formato della data statico

Se si desidera visualizzare un formato statico, che è lo stesso per tutte le impostazioni internazionali (ad esempio ISO 8601 per un feed Atom), è necessario utilizzare il date della date di Twig:

{{ game.gameDate|date('Y-m-d\\TH:i:sP') }}

Che restituirà sempre un datetime nel seguente formato:

2014-05-02T08: 55: 41Z

Le stringhe di formato accettate dal filtro date sono le stesse che usereste per la funzione date() di PHP . (l'unica differenza è che, per quanto ne so, non è possibile utilizzare le costanti predefinite che possono essere utilizzate nella funzione PHP date() )

Date (e orari) localizzate

Tuttavia, dal momento che si desidera renderlo nel browser, è probabile che si desideri mostrarlo in un formato leggibile dall'uomo, localizzato per la lingua e la posizione dell'utente. Invece di fare da solo la localizzazione, puoi usare l' estensione Intl per questo (che usa IntlDateFormatter di PHP). Fornisce un filtro localizeddate che emetterà la data e l'ora utilizzando un formato localizzato.

localizeddate( date_format, time_format [, locale ] )

Argomenti per localizeddate :

  • date_format : una delle stringhe di formato (vedi sotto)
  • time_format : una delle stringhe di formato (vedi sotto)
  • locale : (facoltativo) Utilizzare questo per sovrascrivere le impostazioni locali configurate. Lasciare questo argomento per usare le impostazioni locali predefinite, che possono essere configurate nella configurazione di Symfony.

(ce ne sono altri, consultare i documenti per l'elenco completo di possibili argomenti)

Per date_format e time_format puoi utilizzare una delle seguenti stringhe:

  • 'none' se non vuoi includere questo elemento
  • 'short' per lo stile più abbreviato (12/13/52 o 3:30 pm in una lingua inglese)
  • 'medium' per lo stile medio (12 gennaio 1952 in un locale inglese)
  • 'long' per lo stile lungo (12 gennaio 1952 o 3:30:32 pm in un locale inglese)
  • 'full' per lo stile completamente specificato (martedì 12 aprile 1952 d.C. o 03:30:42 PST in una lingua inglese)

Esempio

Ad esempio, se si desidera visualizzare la data in un formato equivalente al February 6, 2014 at 10:52 AM , utilizzare la seguente riga nel modello Twig:

{{ game.gameDate|localizeddate('long', 'short') }}

Tuttavia, se si utilizza una locale diversa, il risultato sarà localizzato per quella locale:

  • 6 februari 2014 10:52 per il locale nl ;
  • 6 février 2014 10:52 per il locale fr ;
  • 6. Februar 2014 10:52 per il de locale; eccetera.

Come puoi vedere, localizeddate non solo traduce i nomi dei mesi, ma usa anche le notazioni locali. La notazione inglese riporta la data successiva al mese, in cui le notazioni in olandese, francese e tedesco la mettono prima del mese. I nomi dei mesi inglese e tedesco iniziano con una lettera maiuscola, mentre i nomi dei mesi olandese e francese sono in minuscolo. E le date tedesche hanno un punto aggiunto.

Installazione / impostazione della locale

Le istruzioni di installazione per l'estensione Intl possono essere trovate in questa risposta separata .


Sebbene tu possa usare il

{{ game.gameDate|date('Y-m-d') }}

approccio, tenere presente che questa versione non onora le impostazioni locali dell'utente, il che non dovrebbe essere un problema con un sito utilizzato solo da utenti di una nazionalità. Gli utenti internazionali dovrebbero mostrare la data del gioco in modo completamente diverso, come l'estensione della classe \DateTime e l'aggiunta di un metodo __toString() ad esso che controlla le __toString() locali e agisce di conseguenza.

Modifica :

Come sottolineato da @Nic in un commento, se si utilizza l' estensione Intl di Twig , si avrà un filtro localizeddate disponibile, che mostra la data nelle impostazioni locali dell'utente. In questo modo puoi abbandonare la mia precedente idea di estendere \DateTime .


So che questa è una domanda piuttosto vecchia, ma oggi ho trovato questa domanda, ma le risposte non erano ciò di cui avevo bisogno.

Quindi ecco quello di cui avevo bisogno.

Se tu, come me , stai cercando di visualizzare la data corrente in ramoscello, puoi usare quanto segue:

{{ "now"|date("m/d/Y") }}

Vedi la documentazione su questo:

data in ramoscello


Non dimenticare

@ORM \ HasLifecycleCallbacks ()

Entità:

/**
     * Set gameDate
     *
     * @ORM\PrePersist
     */
    public function setGameDate()
    {
        $this->dateCreated = new \DateTime();

        return $this;
    }

Vista:

{{ item.gameDate|date('Y-m-d H:i:s') }}

>> Uscita 2013-09-18 16:14:20


{{game.gameDate | date('c')}}  // 2014-02-05T16:45:22+00:00

Per la stringa di data e ora completa con offset fuso orario.







twig