Beispiel #1
0
 private static function couponFirstPeriodDate($settlement, $maturity, $frequency, $next)
 {
     $months = 12 / $frequency;
     $result = \PHPExcel\Shared\Date::excelToPHPObject($maturity);
     $eom = self::isLastDayOfMonth($result);
     while ($settlement < \PHPExcel\Shared\Date::PHPToExcel($result)) {
         $result->modify('-' . $months . ' months');
     }
     if ($next) {
         $result->modify('+' . $months . ' months');
     }
     if ($eom) {
         $result->modify('-1 day');
     }
     return \PHPExcel\Shared\Date::PHPToExcel($result);
 }
Beispiel #2
0
 /**
  * YEAR
  *
  * Returns the year corresponding to a date.
  * The year is returned as an integer in the range 1900-9999.
  *
  * Excel Function:
  *        YEAR(dateValue)
  *
  * @param    mixed    $dateValue        Excel date serial value (float), PHP date timestamp (integer),
  *                                    PHP DateTime object, or a standard date string
  * @return    int        Year
  */
 public static function YEAR($dateValue = 1)
 {
     $dateValue = Functions::flattenSingleValue($dateValue);
     if ($dateValue === null) {
         $dateValue = 1;
     } elseif (is_string($dateValue = self::getDateValue($dateValue))) {
         return Functions::VALUE();
     } elseif ($dateValue < 0.0) {
         return Functions::NAN();
     }
     // Execute function
     $PHPDateObject = \PHPExcel\Shared\Date::excelToPHPObject($dateValue);
     return (int) $PHPDateObject->format('Y');
 }
 private static function formatAsDate(&$value, &$format)
 {
     // strip off first part containing e.g. [$-F800] or [$USD-409]
     // general syntax: [$<Currency string>-<language info>]
     // language info is in hexadecimal
     $format = preg_replace('/^(\\[\\$[A-Z]*-[0-9A-F]*\\])/i', '', $format);
     // OpenOffice.org uses upper-case number formats, e.g. 'YYYY', convert to lower-case;
     //    but we don't want to change any quoted strings
     $format = preg_replace_callback('/(?:^|")([^"]*)(?:$|")/', ['self', 'setLowercaseCallback'], $format);
     // Only process the non-quoted blocks for date format characters
     $blocks = explode('"', $format);
     foreach ($blocks as $key => &$block) {
         if ($key % 2 == 0) {
             $block = strtr($block, self::$dateFormatReplacements);
             if (!strpos($block, 'A')) {
                 // 24-hour time format
                 $block = strtr($block, self::$dateFormatReplacements24);
             } else {
                 // 12-hour time format
                 $block = strtr($block, self::$dateFormatReplacements12);
             }
         }
     }
     $format = implode('"', $blocks);
     // escape any quoted characters so that DateTime format() will render them correctly
     $format = preg_replace_callback('/"(.*)"/U', ['self', 'escapeQuotesCallback'], $format);
     $dateObj = \PHPExcel\Shared\Date::excelToPHPObject($value);
     $value = $dateObj->format($format);
 }