2016-12-27 6 views
0

У меня есть эта маленькая функция позволяет мне отформатировать дату:Неправильная дата возвращения после использования STRFTIME в PHP

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

Я использую это так:

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

Проблему у меня есть функция вернет мне неправильную дату на французском jeudi 1 janvier 1970.

Это должно быть Mardi 27 décembre 2016.

Поможете ли вы мне найти причину?

Спасибо.

+0

Так как нарушившего к время эпохи, похоже, что '$ date' ошибочно. –

+0

$ дата должна быть отметкой времени. return strftime ('% A% e% B% Y', strtotime ($ date)); исправит его – dpp

+0

@ddp, вы правы. Благодарю. –

ответ

1

strftime ожидает отметку времени UNIX, а не строку даты.

Необязательный параметр timestamp - это целочисленная временная метка Unix, которая по умолчанию соответствует текущему местному времени, если метка времени не указана. Другими словами, по умолчанию значение time().

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

Вы можете либо поместить в метку времени UNIX, возвращаемый time() или преобразовать входные данные в метку времени:

<?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'); 
} 

Смотри также: http://php.net/datetime

Смежные вопросы