用PHP计算英国财政日历的星期,期间和年份

时间:2019-11-28 16:28:46

标签: php date

当您向其传递一个空参数或要包含在该参数中的日期字符串的星期,期间和年份时,我想用一个函数确定当前的财政周期间和年份。

到目前为止,我有这样的功能。

function FiscalDates($date){
    $basedate=date_create("2018-04-29");
    $querydate=date_create($date);
    $diff=date_diff($basedate,$querydate);
    $days = $diff->format('%a'); 
    if(fmod($days,7)==0){
        $weekno = ($days/7)+1;
    } else {
        $weekno = ceil($days/7);
    }
    if(fmod($weekno,4)==0){
        $period = ($weekno/4);
    } else {
        $period = ceil($weekno/4);
    }
    if(fmod($period,13)==0){
        $year = ($period/13)-1;
    } else {
        $year = (ceil($period/13))-1;
    }
    $period = $period-(13*$year);
    $year = $year+2018;
    return array($weekno,$period,$year);
}

这在大多数情况下都有效,但是唯一的问题是,它没有考虑每5-6年发生的“ le周”。 (一年中有53周的时间)see 2nd paragraph of this page about that。每次发生这种情况时,计算将再过一周。

我如何实现类似的目标,但要说明一年中的53周并保持其准确性?

1 个答案:

答案 0 :(得分:0)

可能为时已晚,或者可能不是一个直接的答复,但是几年前对于一家英国企业而言,也遇到了类似的问题,因此决定建立一个对您有帮助的图书馆。

https://github.com/RoussKS/financial-year

可以获得一个财政年度的期间/周数。 它处理两种类型的财政年度。标准的12个月(期),称为calendar作为图书馆惯例,business表示13个会计年度(52/53周)。 Business是您要使用的那个。

它不会检查一年应该是53周的一年,因为这取决于业务,因此您需要提供该参数作为参数(默认为false,也称为52)。

用于获取期间和星期的示例

require_once __DIR__ . '/vendor/autoload.php';

// DateTimeAdapter
// If instantiating with string, it must be of ISO-8601 format 'YYYY-MM-DD'.
// This is your business's financial year start date.
$startDate = new \DateTime('2018-04-01');

$fy = new \RoussKS\FinancialYear\DateTimeAdapter('business', $startDate, false); // false for 52 weeks, true for 53 weeks

$dateToExamine = '2018-04-29';

// Get period of the date in question
echo $fy->getPeriodIdByDate($dateToExamine); // 1

// Get week of the date in question
echo $fy->getBusinessWeekIdIdByDate($dateToExamine); // 5

虽然不确定您所说的年份是什么意思,就像按2018/2019年命名年份一样?