<?php
|
|
namespace PhpOffice\PhpSpreadsheet\Calculation\Financial;
|
|
use DateTimeInterface;
|
use PhpOffice\PhpSpreadsheet\Calculation\DateTimeExcel;
|
use PhpOffice\PhpSpreadsheet\Calculation\Financial\Constants as FinancialConstants;
|
use PhpOffice\PhpSpreadsheet\Calculation\Information\ExcelError;
|
|
class Helpers
|
{
|
/**
|
* daysPerYear.
|
*
|
* Returns the number of days in a specified year, as defined by the "basis" value
|
*
|
* @param int|string $year The year against which we're testing
|
* @param int|string $basis The type of day count:
|
* 0 or omitted US (NASD) 360
|
* 1 Actual (365 or 366 in a leap year)
|
* 2 360
|
* 3 365
|
* 4 European 360
|
*
|
* @return int|string Result, or a string containing an error
|
*/
|
public static function daysPerYear($year, $basis = 0): string|int
|
{
|
if (!is_numeric($basis)) {
|
return ExcelError::NAN();
|
}
|
|
switch ($basis) {
|
case FinancialConstants::BASIS_DAYS_PER_YEAR_NASD:
|
case FinancialConstants::BASIS_DAYS_PER_YEAR_360:
|
case FinancialConstants::BASIS_DAYS_PER_YEAR_360_EUROPEAN:
|
return 360;
|
case FinancialConstants::BASIS_DAYS_PER_YEAR_365:
|
return 365;
|
case FinancialConstants::BASIS_DAYS_PER_YEAR_ACTUAL:
|
return (DateTimeExcel\Helpers::isLeapYear($year)) ? 366 : 365;
|
}
|
|
return ExcelError::NAN();
|
}
|
|
/**
|
* isLastDayOfMonth.
|
*
|
* Returns a boolean TRUE/FALSE indicating if this date is the last date of the month
|
*
|
* @param DateTimeInterface $date The date for testing
|
*/
|
public static function isLastDayOfMonth(DateTimeInterface $date): bool
|
{
|
return $date->format('d') === $date->format('t');
|
}
|
}
|