我有.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;
}
}
截图:
答案 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);
}