需求要导入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;
}