# get_post_datetime : un objet DateTimeImmutable obtenu directement depuis un post

> Reconstruire un objet date à coups de concaténation de chaînes issues d'un article n'a plus lieu d'être depuis qu'une fonction native s'en charge directement.

- Auteur : Clément Hadrot
- Publié le : 2026-03-22
- Mis à jour le : 2026-03-22
- Catégorie : Astuces
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/get-post-datetime-objet-datetimeimmutable-depuis-post/

## L’essentiel

- Retourne directement un DateTimeImmutable prêt à l'emploi
- Choisit entre date locale et date GMT du post
- Fonction native disponible depuis WordPress 5.3

`$date = new DateTime( $post->post_date );` — cette ligne fonctionne, mais elle reconstruit à la main un objet date à partir d'une chaîne déjà stockée sur l'article, sans tenir compte du fuseau horaire de façon explicite, et sans profiter de l'immutabilité qu'offre `DateTimeImmutable`. Depuis WordPress 5.3, `get_post_datetime()` évite cette reconstruction manuelle.

Cette fonction répond à un besoin fréquent dans le développement d'extensions et de thèmes : obtenir un objet date manipulable — pour comparer, formater, ajouter un intervalle — directement à partir d'un article, sans passer par une étape intermédiaire de parsing de chaîne.

## La signature et ses deux paramètres de contexte

`get_post_datetime( int|WP_Post $post = null, string $field = 'date', string $source = 'local' )` retourne un objet `DateTimeImmutable`, ou `false` en cas d'échec. Le paramètre `$field` accepte `'date'` pour la date de publication ou `'modified'` pour la date de dernière modification. Le paramètre `$source` accepte `'local'` pour le fuseau du site, ou `'gmt'` pour l'équivalent UTC déjà stocké en base.

Ce dernier paramètre évite une confusion fréquente avec l'approche manuelle : reconstruire un objet date à partir de `post_date` mélange souvent, sans le vouloir, une chaîne locale avec un fuseau UTC appliqué par défaut par `DateTime`, ce qui décale silencieusement le résultat. `get_post_datetime()` force à choisir explicitement la source, ce qui réduit ce risque.

## Afficher une date de modification relative

> L'essentiel à retenir : Retourne directement un DateTimeImmutable prêt à l'emploi ; Choisit entre date locale et date GMT du post ; Fonction native disponible depuis WordPress 5.3

Un site d'actualités qui veut afficher, sous chaque article, depuis combien de temps il a été mis à jour pour la dernière fois, peut combiner cette fonction avec `human_time_diff()` :

```
function actualites_afficher_derniere_maj( $post_id ) {
    $date_maj = get_post_datetime( $post_id, 'modified' );

    if ( false === $date_maj ) {
        return '';
    }

    return sprintf(
        /* translators: %s : durée écoulée, ex. "2 heures" */
        esc_html__( 'Mis à jour il y a %s', 'actualites-locales' ),
        human_time_diff( $date_maj->getTimestamp() )
    );
}
```

Aucune conversion de chaîne, aucun appel à `strtotime()` : l'objet `DateTimeImmutable` retourné expose directement `getTimestamp()`, ainsi que toutes les méthodes classiques de manipulation de date offertes par l'extension `DateTime` de PHP.

## Comparer deux dates d'articles

L'immutabilité de l'objet retourné simplifie les comparaisons, puisqu'aucune méthode appelée dessus ne modifie l'objet d'origine :

```
$date_a = get_post_datetime( $article_a_id );
$date_b = get_post_datetime( $article_b_id );

if ( $date_a && $date_b && $date_a < $date_b ) {
    // $article_a_id a été publié avant $article_b_id.
}
```

## Ce que cette fonction ne fait pas

- Elle ne formate rien pour l'affichage : pour un rendu localisé selon la langue du site, `wp_date()` reste l'outil adapté, appliqué séparément sur le timestamp obtenu.
- Elle ne donne pas non plus l'heure actuelle du site : ce rôle revient à `current_time()` ou à un objet construit avec le fuseau retourné par `wp_timezone()`.
- Elle retourne `false`, pas une exception, en cas d'article introuvable ou de date invalide : ce retour doit être vérifié avant d'appeler une méthode dessus, sous peine d'erreur fatale sur un appel de méthode sur une valeur booléenne.

> Toujours vérifier que get_post_datetime() n'a pas retourné false avant d'appeler une méthode sur le résultat : un article supprimé entre deux requêtes suffit à provoquer ce cas.

## Un repère utile : la fonction miroir pour écrire une date

Cet article s'est concentré sur la lecture d'une date déjà enregistrée. Pour l'opération inverse — enregistrer une date de publication précise sur un article, par exemple lors d'une importation de contenu — la clé `post_date` attendue par `wp_update_post()` reste au format chaîne classique, et non un objet `DateTimeImmutable` : les deux fonctions ne sont donc pas de simples miroirs l'une de l'autre, ce qui mérite d'être gardé en tête pour éviter une conversion inutile ou, à l'inverse, un format oublié.

## En résumé

`get_post_datetime()` évite une reconstruction manuelle d'objet date à partir des champs bruts d'un article, avec un risque de confusion de fuseau en moins grâce à son paramètre de source explicite. Pour tout traitement qui va au-delà d'un simple affichage — comparaison, calcul d'intervalle, tri par date — cette fonction reste le point de départ le plus direct, avant tout affichage géré séparément par `wp_date()` ou une fonction de durée relative.
