phpexcel错误的天数

时间:2018-05-14 12:04:31

标签: php phpexcel

我有.xls文件和日程表,这个文件的一个col是日期格式,如02.10.2018(d.m.Y)。当我解析.xls时,phpexcel会返回此col +1天的值

文件中的默认日期 - 02.10.2018

输出日期 - 03.10.2018

但是,如果我在这个日期值之间使用分隔符,比如\或其他,则day返回正确的值

出了什么问题,如何在没有魔法的情况下修复它?

    function exceltohtml($file = NULL) {
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('utf-8');
    $data->setUTFEncoder('mb');

    if (!file_exists($_SERVER['DOCUMENT_ROOT'] . $file)) {
         echo 'Необходимо залить файл настроек';
        die();
    }

    // 2. Проверка эксель пустой/не пустой
    $data->read($_SERVER['DOCUMENT_ROOT'] . $file);

    if (empty($data->sheets[0]['cells']) || !count($data->sheets[0]['cells'])) {
         echo 'Эксель файл некорректный или пустой';
         die();
    } else {
        $rows = $data->sheets[0]['cells'];
        return $rows;
    }       

}

截图:

enter image description here

2 个答案:

答案 0 :(得分:0)

Excel将日期作为自1900年1月1日以来的天数(在Windows 1900日历上)。 PHPExcel以相同的方式存储其日期,但不会自动为您格式化它们 所以试试:$val = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($cell->getValue()));

答案 1 :(得分:0)

现在它有效,在reader.php中我发现了函数,我看到了+1的日值。所以,删除+1 =没关系

    function createDate($numValue)
{
    if ($numValue > 1) {
        $utcDays = $numValue - ($this->nineteenFour ? SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS1904 : SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS);
        $utcValue = round(($utcDays+1) * SPREADSHEET_EXCEL_READER_MSINADAY);
        $string = date ($this->curformat, $utcValue);
        $raw = $utcValue;
    } else {
        $raw = $numValue;
        $hours = floor($numValue * 24);
        $mins = floor($numValue * 24 * 60) - $hours * 60;
        $secs = floor($numValue * SPREADSHEET_EXCEL_READER_MSINADAY) - $hours * 60 * 60 - $mins * 60;
        $string = date ($this->curformat, mktime($hours, $mins, $secs));
    }

    return array($string, $raw);
}