Конвертировать дату во французском формате в формате MySQL - PullRequest
5 голосов
/ 08 ноября 2011

Я хочу преобразовать дату во французском формате (08 ноября 2011 года, 06:00) в формат даты и времени (2011-11-08 06:00).

Я могу преобразовать дату и времяво французском формате дата с небольшой функцией:

function dateFR($datetime) {
    setlocale(LC_ALL, 'fr_FR');
    return strftime('%d %B %Y à %Hh%M', strtotime($datetime));
}

Но я не знаю, как поступить наоборот.

Спасибо за вашу помощь.

Ответы [ 5 ]

6 голосов
/ 08 ноября 2011

Как насчет?

date("Y-m-d H:i:s", strtotime($datetime));

Ах, да, я вижу проблему.strtotime преобразует только английский текст (выделение мое):

Функция ожидает получения строки, содержащей формат даты English , и попытается проанализировать этот формат в Unixотметка времени

Вероятно, ваша лучшая ставка будет preg_match для вашего конкретного формата, поскольку, похоже, нет никаких специфических для локали функций, которые будут преобразовывать такие вещи, как название месяца.*

3 голосов
/ 22 марта 2014

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

    private function dateToMySQL($date){
        $tabDate = explode('/' , $date);
        $date  = $tabDate[2].'-'.$tabDate[1].'-'.$tabDate[0];
        $date = date( 'Y-m-d H:i:s', strtotime($date) );
        return $date;
    }

Это довольно просто и предупреждаю, если пропущенные числа, например, день.

1 голос
/ 29 декабря 2016

если у вас есть массив или multiArray, я сделал эту функцию, используйте все введенные вами даты, начиная с name = "date _...."

function dateFormatSql(&$array){
foreach ($array as $key=>&$value){
    if(!is_array($value)){
        if(preg_match("#^date_#", $key)){
            $tabDate = explode('/' , $value);
            $date  = $tabDate[2].'/'.$tabDate[1].'/'.$tabDate[0];
            $sqldate =  date('Y/m/d', strtotime($date));
            $array[$key] = $sqldate;
        }
    }else{
        dateFormatSql($value);
    }

}

}

0 голосов
/ 19 июня 2019

попробуйте этот код:

function frToEn($date){
/* this function Convert a date in french format to english format
** EXP : 
**  French date  : 20-juin-2019
**  English date :  20-jun-2019
*/
$month=substr($s1=substr($date,strpos($date,'-')+1) , 0 , -(strlen($s1)-strpos($s1,"-")));
$year=substr($s1,strpos($s1,'-')+1);
$day=substr($date,0,strpos($date,'-'));

switch ($month) {
    case 'janvier': 
    case 'janv': 
    case 'jan':
        return $day."-jan-".$year;
        break;
    case 'février' :
    case'févr' :
    case'fév':
        return $day."-feb-".$year;
        break;
    case 'mars' :
    case'mar':
        return $day."-mar-".$year;
        break;
    case 'avril' :
    case'avr':
        return $day."-apr-".$year;
        break;
    case 'mai':
        return $day."-may-".$year;
        break;
    case 'juin':
        return $day."-jun-".$year;
        break;
    case 'juillet' :
    case'juil':
        return $day."-jul-".$year;
        break;
    case 'aout' :
    case'août':
        return $day."-aug-".$year;
        break;
    case 'septembre' :
    case'sept' :
    case'sep':
        return $day."-sep-".$year;
        break;
    case 'octobre' :
    case'oct':
        return $day."-oct-".$year;
        break;
    case 'novembre' :
    case'nov':
        return $day."-nov-".$year;
        break;
    case 'décembre' :
    case'déc':
        return $day."-dec-".$year;
        break;

    default:
        return false;
        break;
}}

для формата mysql используйте эту функцию:

date('Y-m-d',strtotime(frToEn($date))
0 голосов
/ 12 января 2017

Я знаю, что вопрос был долгое время, но поскольку у меня только что была такая же проблема, я предлагаю следующее решение:

DateTime::createFromFormat('d/m/Y H:i',$datetime)->format('Y-m-d H:i')

Но требуется PHP 5.3.Более подробная информация о http://php.net/manual/en/datetime.createfromformat.php

...