/** * TIME * * @param long $hour * @param long $minute * @param long $second * @return mixed Excel date/time serial value, PHP date/time serial value or PHP date/time object, * depending on the value of the ReturnDateType flag */ public static function TIME($hour = 0, $minute = 0, $second = 0) { $hour = self::flattenSingleValue($hour); $minute = self::flattenSingleValue($minute); $second = self::flattenSingleValue($second); if ($hour == '') { $hour = 0; } if ($minute == '') { $minute = 0; } if ($second == '') { $second = 0; } if (!is_numeric($hour) || !is_numeric($minute) || !is_numeric($second)) { return self::$_errorCodes['value']; } $hour = (int) $hour; $minute = (int) $minute; $second = (int) $second; if ($second < 0) { $minute += floor($second / 60); $second = 60 - abs($second % 60); if ($second == 60) { $second = 0; } } elseif ($second >= 60) { $minute += floor($second / 60); $second = $second % 60; } if ($minute < 0) { $hour += floor($minute / 60); $minute = 60 - abs($minute % 60); if ($minute == 60) { $minute = 0; } } elseif ($minute >= 60) { $hour += floor($minute / 60); $minute = $minute % 60; } if ($hour > 23) { $hour = $hour % 24; } elseif ($hour < 0) { return self::$_errorCodes['num']; } // Execute function switch (self::getReturnDateType()) { case self::RETURNDATE_EXCEL: $date = 0; $calendar = Shared_Date::getExcelCalendar(); if ($calendar != Shared_Date::CALENDAR_WINDOWS_1900) { $date = 1; } return (double) Shared_Date::FormattedPHPToExcel($calendar, 1, $date, $hour, $minute, $second); break; case self::RETURNDATE_PHP_NUMERIC: return (int) Shared_Date::ExcelToPHP(Shared_Date::FormattedPHPToExcel(1970, 1, 1, $hour - 1, $minute, $second)); // -2147468400; // -2147472000 + 3600 break; case self::RETURNDATE_PHP_OBJECT: $dayAdjust = 0; if ($hour < 0) { $dayAdjust = floor($hour / 24); $hour = 24 - abs($hour % 24); if ($hour == 24) { $hour = 0; } } elseif ($hour >= 24) { $dayAdjust = floor($hour / 24); $hour = $hour % 24; } $phpDateObject = new DateTime('1900-01-01 ' . $hour . ':' . $minute . ':' . $second); if ($dayAdjust != 0) { $phpDateObject->modify($dayAdjust . ' days'); } return $phpDateObject; break; } }
/** * Write WorkbookPr * * @param Shared_XMLWriter $objWriter XML Writer * @throws Exception */ private function _writeWorkbookPr(Shared_XMLWriter $objWriter = null) { $objWriter->startElement('workbookPr'); if (Shared_Date::getExcelCalendar() == Shared_Date::CALENDAR_MAC_1904) { $objWriter->writeAttribute('date1904', '1'); } $objWriter->writeAttribute('codeName', 'ThisWorkbook'); $objWriter->endElement(); }
/** * Write DATEMODE record to indicate the date system in use (1904 or 1900). */ private function _writeDatemode() { $record = 0x22; // Record identifier $length = 0x2; // Bytes to follow $f1904 = Shared_Date::getExcelCalendar() == Shared_Date::CALENDAR_MAC_1904 ? 1 : 0; // Flag for 1904 date system $header = pack("vv", $record, $length); $data = pack("v", $f1904); $this->_append($header . $data); }