@@ 443-467 (lines=25) @@ | ||
440 | * |
|
441 | * @return float |
|
442 | */ |
|
443 | public static function COUPDAYBS($settlement, $maturity, $frequency, $basis = 0) |
|
444 | { |
|
445 | $settlement = Functions::flattenSingleValue($settlement); |
|
446 | $maturity = Functions::flattenSingleValue($maturity); |
|
447 | $frequency = (int) Functions::flattenSingleValue($frequency); |
|
448 | $basis = ($basis === null) ? 0 : (int) Functions::flattenSingleValue($basis); |
|
449 | ||
450 | if (is_string($settlement = DateTime::getDateValue($settlement))) { |
|
451 | return Functions::VALUE(); |
|
452 | } |
|
453 | if (is_string($maturity = DateTime::getDateValue($maturity))) { |
|
454 | return Functions::VALUE(); |
|
455 | } |
|
456 | ||
457 | if (($settlement > $maturity) || |
|
458 | (!self::isValidFrequency($frequency)) || |
|
459 | (($basis < 0) || ($basis > 4))) { |
|
460 | return Functions::NAN(); |
|
461 | } |
|
462 | ||
463 | $daysPerYear = self::daysPerYear(DateTime::YEAR($settlement), $basis); |
|
464 | $prev = self::couponFirstPeriodDate($settlement, $maturity, $frequency, false); |
|
465 | ||
466 | return DateTime::YEARFRAC($prev, $settlement, $basis) * $daysPerYear; |
|
467 | } |
|
468 | ||
469 | /** |
|
470 | * COUPDAYS. |
|
@@ 586-610 (lines=25) @@ | ||
583 | * |
|
584 | * @return float |
|
585 | */ |
|
586 | public static function COUPDAYSNC($settlement, $maturity, $frequency, $basis = 0) |
|
587 | { |
|
588 | $settlement = Functions::flattenSingleValue($settlement); |
|
589 | $maturity = Functions::flattenSingleValue($maturity); |
|
590 | $frequency = (int) Functions::flattenSingleValue($frequency); |
|
591 | $basis = ($basis === null) ? 0 : (int) Functions::flattenSingleValue($basis); |
|
592 | ||
593 | if (is_string($settlement = DateTime::getDateValue($settlement))) { |
|
594 | return Functions::VALUE(); |
|
595 | } |
|
596 | if (is_string($maturity = DateTime::getDateValue($maturity))) { |
|
597 | return Functions::VALUE(); |
|
598 | } |
|
599 | ||
600 | if (($settlement > $maturity) || |
|
601 | (!self::isValidFrequency($frequency)) || |
|
602 | (($basis < 0) || ($basis > 4))) { |
|
603 | return Functions::NAN(); |
|
604 | } |
|
605 | ||
606 | $daysPerYear = self::daysPerYear(DateTime::YEAR($settlement), $basis); |
|
607 | $next = self::couponFirstPeriodDate($settlement, $maturity, $frequency, true); |
|
608 | ||
609 | return DateTime::YEARFRAC($settlement, $next, $basis) * $daysPerYear; |
|
610 | } |
|
611 | ||
612 | /** |
|
613 | * COUPNCD. |