@@ 429-453 (lines=25) @@ | ||
426 | * |
|
427 | * @return float |
|
428 | */ |
|
429 | public static function COUPDAYBS($settlement, $maturity, $frequency, $basis = 0) |
|
430 | { |
|
431 | $settlement = Functions::flattenSingleValue($settlement); |
|
432 | $maturity = Functions::flattenSingleValue($maturity); |
|
433 | $frequency = (int) Functions::flattenSingleValue($frequency); |
|
434 | $basis = ($basis === null) ? 0 : (int) Functions::flattenSingleValue($basis); |
|
435 | ||
436 | if (is_string($settlement = DateTime::getDateValue($settlement))) { |
|
437 | return Functions::VALUE(); |
|
438 | } |
|
439 | if (is_string($maturity = DateTime::getDateValue($maturity))) { |
|
440 | return Functions::VALUE(); |
|
441 | } |
|
442 | ||
443 | if (($settlement > $maturity) || |
|
444 | (!self::isValidFrequency($frequency)) || |
|
445 | (($basis < 0) || ($basis > 4))) { |
|
446 | return Functions::NAN(); |
|
447 | } |
|
448 | ||
449 | $daysPerYear = self::daysPerYear(DateTime::YEAR($settlement), $basis); |
|
450 | $prev = self::couponFirstPeriodDate($settlement, $maturity, $frequency, false); |
|
451 | ||
452 | return DateTime::YEARFRAC($prev, $settlement, $basis) * $daysPerYear; |
|
453 | } |
|
454 | ||
455 | /** |
|
456 | * COUPDAYS. |
|
@@ 570-594 (lines=25) @@ | ||
567 | * |
|
568 | * @return float |
|
569 | */ |
|
570 | public static function COUPDAYSNC($settlement, $maturity, $frequency, $basis = 0) |
|
571 | { |
|
572 | $settlement = Functions::flattenSingleValue($settlement); |
|
573 | $maturity = Functions::flattenSingleValue($maturity); |
|
574 | $frequency = (int) Functions::flattenSingleValue($frequency); |
|
575 | $basis = ($basis === null) ? 0 : (int) Functions::flattenSingleValue($basis); |
|
576 | ||
577 | if (is_string($settlement = DateTime::getDateValue($settlement))) { |
|
578 | return Functions::VALUE(); |
|
579 | } |
|
580 | if (is_string($maturity = DateTime::getDateValue($maturity))) { |
|
581 | return Functions::VALUE(); |
|
582 | } |
|
583 | ||
584 | if (($settlement > $maturity) || |
|
585 | (!self::isValidFrequency($frequency)) || |
|
586 | (($basis < 0) || ($basis > 4))) { |
|
587 | return Functions::NAN(); |
|
588 | } |
|
589 | ||
590 | $daysPerYear = self::daysPerYear(DateTime::YEAR($settlement), $basis); |
|
591 | $next = self::couponFirstPeriodDate($settlement, $maturity, $frequency, true); |
|
592 | ||
593 | return DateTime::YEARFRAC($settlement, $next, $basis) * $daysPerYear; |
|
594 | } |
|
595 | ||
596 | /** |
|
597 | * COUPNCD. |