需求要导入dbf文件,google得到一个人家写好的类,如下
http://www.phpclasses.org/package/1302-PHP-Extract-information-from-a-DBF-database-file.html
测试可读取大部分内容,但是类型为TIMESTAMP的项却是无法正确解析得出。
观源码发现$col=trim(substr($rawrow,$beg,$this->dbf_names[$i]['len']));他均做了一个trim,当然问题就出在这儿了。
要判断该$col的type类型,若是T,则不trim。而我们dbf里的时间戳是juliaday格式。
通过unpack('Vdate/Vsecond', $col),可得到一个存储juliaday时间戳的数组。可通过jdtounix把date转换成unix的时间戳格式。
咱未发现别的类型的问题,代码如下
switch($this->dbf_names[$i]['type']){ case 'C':$col=trim(substr($rawrow,$beg,$this->dbf_names[$i]['len']));break; case 'T':$col=unpack('Vdate/Vsecond',(substr($rawrow,$beg,$this->dbf_names[$i]['len']))); $timestamp = jdtounix($col['date']); $col = date('Y-m-d H:i:s', $timestamp);break; default:$col=trim(substr($rawrow,$beg,$this->dbf_names[$i]['len']));break; }