networkrailbusinesssystems/financial-calendar

计算任何给定日期的确切财务日历期间、周、季度和年份

1.1.0 2024-05-17 08:27 UTC

This package is auto-updated.

Last update: 2024-09-17 09:10:28 UTC


README

Composer status Coverage status PHP version Tests status

根据网络铁路财务日历,计算任何给定日期的确切财务年度、年内周、季度、期间和期间内周。

安装

财务日历可以作为独立类或作为Laravel项目的一部分使用。提供了服务提供者和外观选项。

  • PHP ^8
  • Nesbot/Carbon ^2

您可以使用以下命令将库包含到项目中:composer require networkrailbusinesssystems/financial-calendar

用法

可以直接包含或通过Laravel服务提供者调用Financial Calendar类。

开箱即用,无论是否有特定的外观调用,都可以作为实例类和外观使用。

$calendar = new FinancialCalendar('2018-05-08');

$calendar = FinancialCalendar::parse('2018-05-08');

日期格式

开箱即用,此类支持以下日期格式

  • 2018-07-01 (Y-m-d)
  • 2018-07-01 00:00:00 (Y-m-d h:i:s)
  • Carbon实例
  • DateTime实例
  • 1530403200 (时间戳)

您可以将特定格式作为接受日期的任何方法的第二个参数。

$calendar = new FinancialCalendar('01-01-2010', 'm-d-Y');

FinancialCalendar::parse('01-01-2010', 'm-d-Y');

如果您需要支持其他格式,请提交拉取请求。

年度开始日期

默认情况下,每个财务年度从4月1日开始。如果您需要从其他日期开始日历,只需调用setYearStart函数。

年度开始覆盖

可以将一组已知自定义年度开始提供给setYearStartOverrides

[ year => [month, day] ]

$yearStartOverrides = [
    2017 => [4, 2]
];

$calendar->setYearStartOverrides($yearStartOverrides);

财务日历中已预设任何已知年度开始。

短周

有时财务年度会进行调整,以防止非常短的报告周。以下机制对此进行补偿

短周限制

如果财务年度的第一周短于设置的短周限制,则自动延长到下一个完整工作周的末尾。

周长度覆盖

如果自动短周限制不足,或者需要在第一周之外的其他地方需要长周,则有一组周长度可供使用。

该数组包含一组年份,以及一对周数和该周的长度,可以通过调用setWeekLengthOverrides应用

[ year => [week => length] ]

$weekLengthOverrides = [
    2020 => [
        1 => 11
    ]
];

$calendar->setWeekLengthOverrides($weekLengthOverrides);

财务日历中已预设任何已知周长度。

浏览日历

将日历移动到下一个财务期间或周

$calendar
    ->nextPeriod()
    ->nextWeek();

如果您觉得其他日历导航方法很有用,请联系或提交PR。

特质

如果您不在数据库中存储年和期,或者您需要能够根据财务日历中的年或期搜索任意日期,则可以在任何具有适当日期列的Eloquent模型上使用HasFinancialDates特质。

$myModel->forFinancialYear(2001)->get();
$myModel->forFinancialPeriod(2001, 12)->get();

端点

您可以利用日历作为实例或静态类,并且一些命令支持流畅的接口。

实例

静态

Endpoint Map

测试

此辅助程序已使用PHPUnit进行测试,以验证准确性和功能,并与实际日历数据进行测试。

  • 54个测试,8103个断言
  • 验证了2004 - 2035年的计算
  • 日期计算
  • 接受日期格式
  • 类使用