php格式日期1970年以前MySQL插入


php format date pre 1970 fro MySQL insert

我正在从CSV文件导入数据,其中一列有日期列表。其中一些日期是1970年以前。示例日期为1956年3月10日

我在将这些日期格式化为可以插入MySQL的格式时遇到了问题。

如果我使用这个

$date = DateTime::createFromFormat('d/m/Y', $col[8]);

我收到这个错误消息

在非对象上调用成员函数format()

但如果我硬编码这样的日期,它工作

$date = DateTime::createFromFormat('d/m/Y', '21/03/1966');

这是完整的代码

$inputFileName = 'data.csv';
if (($handle = fopen($inputFileName, "r")) !== FALSE) {
    fgetcsv($handle); 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        for ($i = 0; $i < $num; $i++) {
            $col[$i] = $data[$i];
        }
        try {
            $date = DateTime::createFromFormat('d/m/Y', trim($col[8]));
        } 
        catch (Exception $e) {
            echo $e->getMessage();
            exit(1);
        }
        echo $date->format("Y-m-d");
    }
    fclose($handle);
}

您不能保证所有字段都存在于CSV文件中,因此您必须对进行一些控制

define('DATE_COLUMN', 8);
// @Warning : avoid hard coding file name !
$inputFileName = 'data.csv';
if (($handle = fopen($inputFileName, "r")) !== FALSE) {
    fgetcsv($handle); 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        for ($i = 0; $i < $num; $i++) {
            $col[$i] = $data[$i];
        }
        $dateString = NULL;
        if (isset($col[DATE_COLUMN]) && 
            strlen(trim($col[DATE_COLUMN])) > 0) {
            $dateString = trim($col[DATE_COLUMN]);
        }
        if (is_null($dateString)) {
            // print log or throw an exception if you want
        }
        else {
           try {
               $date = DateTime::createFromFormat('d/m/Y', dateString);
               echo $date->format("Y-m-d");
           } 
           catch (Exception $e) {
               echo $e->getMessage();
               exit(1);
           }
        }
    }
    fclose($handle);
}