Ejemplo n.º 1
0
 /**
  * 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;
     }
 }
Ejemplo n.º 2
0
 /**
  * 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();
 }
Ejemplo n.º 3
0
 /**
  * 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);
 }