импорт файла csv в mysql и одновременное изменение формата даты и времени

У меня есть сценарий, который импортирует файл CSV в таблицу MySQL, используя разнесение для разделения полей. мое последнее поле в файле csv - это поле даты и времени, но в неправильном формате, как показано на изображении ниже: введите описание изображения здесь

Я хочу использовать приведенный ниже код, чтобы вставить csv в MySQL и изменить формат последнего столбца с mm / dd / yyyy hh: mm: ss am / pm на формат MySQL yyyy-mm-dd hh: mm: ss

Существующий рабочий скрипт (просто не импортирует поле даты и времени из-за неправильного формата):

$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "LoadsOverWB.csv";
foreach(split($lineseparator,$csvcontent) as $line) {

    $lines++;

    $line = trim($line," \t");

    $line = str_replace("\r","",$line);

    /************************************
    This line escapes the special character. remove it if entries are already escaped in the csv file
    ************************************/
    $line = str_replace("'","\'",$line);
    /*************************************/

    $linearray = explode($fieldseparator,$line);

    $linemysql = implode("','",$linearray);

    if($addauto)
        $query = "replace into $databasetable(loadnumber,weighbillnumber,VehicleRegistration,haulier,vehicleweight,rolledproductkg,hegrosskg,roofinhkg,nonmetalkg,wbtotalkg,datetime) values('','$linemysql');";
    else
        $query = "replace into $databasetable(loadnumber,weighbillnumber,VehicleRegistration,haulier,vehicleweight,rolledproductkg,hegrosskg,roofinhkg,nonmetalkg,wbtotalkg,datetime) values('$linemysql');";

    $queries .= $query . "\n";

    @mysql_query($query);
}

Заранее спасибо, как всегда, очень признателен.


person Smudger    schedule 17.01.2013    source источник
comment
использовать функцию даты php   -  person Muhammad Raheel    schedule 17.01.2013


Ответы (2)


Просто добавьте две строчки после разнесения

$key    =   count($linearray);
$linearray[$key - 1]    =   date('Y-m-d H:i:s',strtotime($linearray[$key - 1]));

$linemysql = implode("','",$linearray);

Также перед вставкой print_r результат, чтобы увидеть, был ли изменен формат.

РЕДАКТИРОВАТЬ:

Глядя на библиотеку, которую вы используете, я предполагаю, что последний индекс каждой строки - это ваш столбец даты (TIME OVER WEB). Итак, я считаю длину массива и count - 1 дает мне последний индекс, поэтому я применяю функцию даты php. date ('format', strtotime (datevalue)) strtotime преобразует данную строку в числа вроде 32431234, а затем функция date принимает параметры буксировки. Формат и номер. Я уверен, что этого достаточно, чтобы вы поняли.

person Muhammad Raheel    schedule 17.01.2013
comment
Спасибо, Рахил, работает отлично, но я не уверен, почему, не могли бы вы рассказать немного о причине, по которой это работает? Еще раз спасибо, - person Smudger; 17.01.2013

Прежде всего вам следует проверить fgetcsv (). Вы получите каждую строку в массив и сможете намного лучше его обрабатывать.

И чтобы ответить на ваш вопрос, вам нужно отформатировать дату.

$date = $linearray['date']; // or what key your date has
$date = date('Y-M-d H:i:s', strtotime($date));
person Vlad Preda    schedule 17.01.2013