Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

current_time contre time() : obtenir une date dans le fuseau horaire du site

Un horodatage enregistré avec time() peut afficher une heure décalée au client, selon le fuseau horaire configuré dans les réglages du site.

Par WordPress Développement • 27 juillet 2024 • 4 min de lecture • Aucun commentaire
current_time contre time() : obtenir une date dans le fuseau horaire du site

Un article programmé pour 14h s’affiche comme publié à 12h dans l’interface d’administration. Ce genre de décalage de deux heures, retrouvé sur de nombreux sites français, trahit presque toujours la même confusion : l’utilisation de time(), la fonction native de PHP, là où current_time(), sa contrepartie WordPress, aurait dû être utilisée.

time() renvoie systématiquement un horodatage Unix basé sur le fuseau horaire UTC, indépendamment de tout réglage propre au site WordPress. C’est un comportement cohérent et documenté côté PHP, mais qui ignore complètement le fuseau horaire configuré dans les réglages généraux du site, disponible sous Réglages > Général.

Ce que current_time() ajoute

current_time() prend en compte ce réglage de fuseau horaire pour renvoyer une valeur cohérente avec l’heure locale configurée par l’administrateur du site. Elle accepte un premier argument qui détermine le format de retour :

echo time();
// 1690449600 (horodatage UTC)

echo current_time( 'timestamp' );
// 1690456800 (horodatage ajusté selon le fuseau horaire du site, ex. UTC+2)

echo current_time( 'mysql' );
// 2023-07-27 14:00:00 (chaîne au format compatible MySQL, déjà ajustée)

Le format 'timestamp' renvoie un horodatage Unix, mais décalé pour refléter l’heure locale du site plutôt que l’UTC brut. Ce détail est important à comprendre : le résultat n’est techniquement plus un horodatage Unix « pur » au sens strict, puisqu’il intègre l’ajustement de fuseau horaire directement dans sa valeur numérique.

Un usage concret : horodater un enregistrement personnalisé

L'essentiel à retenir : time() renvoie toujours un horodatage en UTC, quel que soit le réglage du site ; current_time() applique le fuseau horaire configuré dans les réglages généraux ; Le second paramètre de current_time() choisit le format de retour, horodatage ou chaîne
function enregistrer_signalement( $post_id, $motif ) {
    add_post_meta( $post_id, 'signalements', array(
        'motif' => sanitize_text_field( $motif ),
        'date'  => current_time( 'mysql' ),
    ) );
}

Utiliser current_time( 'mysql' ) plutôt que date( 'Y-m-d H:i:s' ) ou un horodatage brut garantit que la date enregistrée correspond bien à l’heure locale telle que configurée dans les réglages du site, cohérente avec ce que WordPress affiche par ailleurs dans son interface d’administration pour les autres contenus.

Le second paramètre, pour un résultat en UTC malgré tout

current_time() accepte un second paramètre optionnel, un booléen qui force le retour en UTC plutôt qu’en heure locale, si un contexte particulier l’exige malgré l’usage de cette fonction :

$horodatage_utc = current_time( 'timestamp', true );
// Équivalent, dans ce cas précis, à time().

Ce paramètre reste rarement utilisé en pratique, mais il permet de rester cohérent dans le choix de la fonction utilisée à travers tout un projet, plutôt que d’alterner entre time() et current_time() selon les endroits du code.

Comparer avec wp_date() pour le formatage

Une confusion fréquente consiste à utiliser current_time() pour formater une date destinée à l’affichage, un rôle qui revient plutôt à wp_date(). current_time() sert avant tout à obtenir une valeur temporelle exploitable — horodatage ou chaîne MySQL — au moment présent, tandis que wp_date() formate une date déjà connue, y compris une date passée ou future, selon les paramètres régionaux et le fuseau horaire du site :

$horodatage = get_post_time( 'U', true, $post_id );

echo wp_date( 'j F Y à H\hi', $horodatage );
// 27 juillet 2024 à 14h00

Les deux fonctions se complètent plutôt qu’elles ne se concurrencent : current_time() pour capturer un instant présent au bon fuseau horaire, wp_date() pour formater n’importe quelle date selon les réglages régionaux du site.

Repérer les décalages déjà en place

  • Rechercher dans le code du projet les occurrences directes de time() ou de date() sans passage par les fonctions WordPress dédiées.
  • Vérifier le réglage de fuseau horaire du site sous Réglages > Général, souvent laissé sur sa valeur par défaut lors de l’installation initiale.
  • Comparer une date enregistrée récemment avec l’heure réelle de l’action pour confirmer visuellement l’ampleur d’un éventuel décalage.

Sur tout code qui horodate une action utilisateur destinée à être affichée telle quelle, remplacer systématiquement time() par current_time( 'timestamp' ) évite un décalage silencieux qui ne se remarque souvent qu’après plusieurs semaines de production.

En résumé

La différence entre les deux fonctions tient à une question simple : l’heure UTC brute intéresse-t-elle réellement le projet, ou faut-il refléter l’heure locale configurée par l’administrateur du site ? Dans l’immense majorité des cas d’horodatage visible par un utilisateur, c’est current_time() qui répond correctement à ce besoin, pas la fonction native de PHP.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi