2013-07-17 3 views
1

У меня есть простая проблема с моим кодом. У меня есть функция, где я передаю дату в итальянский формат, и я хочу изменить формат на английский.изменить, перевести формат даты

меня попробовать это:

public function changeDateFormat($date_start_old){ 
     $date_start_old = strtotime($date_start_old); 
     $date_start = date("Y/m/d" , $date_start_old); 

     echo('Date start: '.$date_start); 
} 

Мой старый DATE_START является:

01/lug/2013 

(это эквивалент 01/07/2013)

И когда я пытаюсь напечатать новый date_start Я извлекаю это, потому что не признает lug:

1970/01/01 

Есть ли способ преобразовать итальянскую дату на английский и после изменения формата?

Благодаря

+0

http://stackoverflow.com/questions/6988536/strtotime-with-different-languages ​​ – bitWorking

+0

Вы пробовали 'setlocale()', за которым следует 'strftime()'? –

ответ

2

В вашем случае я бы использовал простой массив перевода, чтобы преобразовать итальянские названия месяцев английских названий месяцев. Что-то, как это должно работать: -

/** 
* @param $dateStr 
* @return DateTime 
*/ 
function getDateFromItalian($dateStr) 
{ 
    $translation = array(
     'gennaio' => 'January', 
     'febbraio' => 'February', 
     'marzo' => 'March', 
     'aprile' => 'April', 
     'maggio' => 'May', 
     'giugno' => 'June', 
     'luglio' => 'July', 
     'agosto' => 'August', 
     'settembre' => 'September', 
     'ottobre' => 'October', 
     'novembre' => 'November', 
     'dicembre' => 'December', 
     'gen' => 'January', 
     'feb' => 'February', 
     'mar' => 'March', 
     'apr' => 'April', 
     'mag' => 'May', 
     'giu' => 'June', 
     'lug' => 'July', 
     'ago' => 'August', 
     'set' => 'September', 
     'ott' => 'October', 
     'nov' => 'November', 
     'dic' => 'December', 
    ); 

    list($day, $month, $year) = explode('/', $dateStr); 
    return new \DateTime($day . ' ' . $translation[strtolower($month)] . ' ' . $year, new \DateTimeZone('Europe/Rome')); 
} 

var_dump(getDateFromItalian('01/lug/2013')); 

Выход: -

object(DateTime)[1] 
    public 'date' => string '2013-07-01 00:00:00' (length=19) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'Europe/Rome' (length=11) 

посмотреть PHP DateTime manual для получения дополнительной информации.

+1

Да, я использую это решение! Благодаря! +1 для примера –

+0

Это самый быстрый прием, который я когда-либо видел! Рад, что у вас есть решение :) – vascowhite

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