2016-12-27 2 views
0

J'ai cette petite fonction me permettant de formater une date:date retour incorrect après strftime utilisation en PHP

function formatDateTime($date, $lang) { 
    setlocale(LC_TIME, $lang); 
    return strftime('%A %e %B %Y', $date); 
} 

Je l'utilise comme ceci:

formatDateTime('2016-12-27', 'fr_FR'); 

Le problème que j'ai est la fonction me renvoie une mauvaise date en français jeudi 1 janvier 1970.

Il devrait être Mardi 27 décembre 2016.

Pouvez-vous m'aider à trouver pourquoi?

Merci.

+0

Comme il est en défaut de à l'époque, il semble que le '$ date' est faux. –

+0

$ date doit être un horodatage. return strftime ('% A% e% B% Y', strtotime ($ date)); va le réparer – dpp

+0

@ddp, vous avez raison. Merci. –

Répondre

1

strftime s'attend à un horodatage UNIX, pas à une chaîne de date.

Le paramètre facultatif timestamp est un horodatage Unix entier dont l'heure locale actuelle est définie par défaut si un horodatage n'est pas indiqué. En d'autres termes, il prend par défaut la valeur de time().

http://php.net/manual/en/function.strftime.php

Vous pouvez mettre dans un timestamp UNIX retourné par time() ou convertir l'entrée d'un horodatage:

<?php 

function formatDateTime($date, $lang) { 
    setlocale(LC_TIME, $lang); 

    if(is_numeric($date)) { 
     /* UNIX timestamps must be preceded by an "@" for the DateTime constructor */ 
     $datetime = new DateTime('@' . $date); 
    } 
    else { 
     /* …anything else is fine (mostly) fine to digest for DateTime */ 
     $datetime = new DateTime($date); 
    } 

    /* Now use strftime() or… */ 
// return strftime('%A %e %B %Y', $datetime->getTimestamp()); 

    /* …instead of using strftime() it now may be better to use 
    * the format() method from the DateTime object:*/ 
    return $datetime->format('%A %e %B %Y'); 
} 

Voir aussi: http://php.net/datetime