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); }
/** * 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); }