Eridani
@Eridani
Мимо проходил

Неверно воспринимается дата при парсинге .xls файла через phpexcel?

День добрый.
ПарсЮ .xls, на выходе получаю нормальный человеческий массив, но не в этом дело
Один из столбцов в .xls предназначен для даты, дата прописывается в формате:
12.01.2018
20.10.2017 и т.п.
После отработки phpexcel, ко дню этой даты добавляется +1, т.е. 12 число превращается в 13, 20 в 21
1I2IpK2TvzM.jpg

Если в экселе поменять точки на тире, слэш и т.д. как разделитель дней, месяц, годов , то парсится нормально, а вот с точками вот такая вот мистика.
Как с этим справится?

Код парсинга, на всякий случай, хотя и не должен понадобиться
код
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;
		}		
		
	}
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
Eridani
@Eridani Автор вопроса
Мимо проходил
Решил.
Нашел функцию формирования даты и +1 к дню в reader.php
Убрал , запахало.
function createDate($numValue)
    {
        if ($numValue > 1) {
            $utcDays = $numValue - ($this->nineteenFour ? SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS1904 : SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS);
            $utcValue = round(($utcDays) * 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);
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы