Я использую PHPExcel для создания шаблона xls, который пользователь может загрузить и заполнить с помощью данных, которые он хочет. Как известно, Excel сохраняет дату в цифровом формате. Я использую эту функцию для преобразования данных и возврата метки времени:
public static function excelToTimestamp($excelDateTime, $isMacExcel=false) { $myExcelBaseDate = $isMacExcel ? 24107 : 25569; // 1st jan 1904 or 1st jan 1900 if (!$isMacExcel && $excelDateTime < 60) { // Adjust for the spurious 29-Feb-1900 (Day 60) --$myExcelBaseDate; } // Perform conversion if ($excelDateTime >= 1) { $timestampDays = $excelDateTime - $myExcelBaseDate; $timestamp = round($timestampDays * 86400); if (($timestamp <= PHP_INT_MAX) && ($timestamp >= -PHP_INT_MAX)) { $timestamp = intval($timestamp); } } else { $hours = round($excelDateTime * 24); $mins = round($excelDateTime * 1440) - round($hours * 60); $secs = round($excelDateTime * 86400) - round($hours * 3600) - round($mins * 60); $timestamp = (integer) gmmktime($hours, $mins, $secs); } return $timestamp; }
Проблема в том, что я должен определить, был ли файл, который пользователь импортировал в систему, был заполнен с использованием excel для mac или windows, так что я могу правильно установить дату (mac использует календарь 1904 года, а в окнах – 1900).
Я хотел бы знать, есть ли способ обнаружить его с помощью PHPExcel. Если нет, я могу позволить пользователю сообщить об этом с помощью радиооблока, может быть …
Я просто решил эту проблему, используя, как предложил @markBaker, функцию PHPExcel для преобразования даты и времени, делая это:
foreach ($rowLine as $header => $col) { if ($header == self::COLUMN_DATE) { //transform the excel date value into a datetime object $date = PHPExcel_Shared_Date::ExcelToPHPObject($sheetData[$row][$col]); $rowLine[$header] = $date->format('m/d/Y'); }else if ($header == self::COLUMN_HOUR) { //transform the excel time value into a datetime object $time = PHPExcel_Shared_Date::ExcelToPHPObject($sheetData[$row][$col]); $rowLine[$header] = $time->format('H:i'); }else{ $rowLine[$header] = $sheetData[$row][$col]; } }