networkrailbusinesssystems / financial-calendar
计算任何给定日期的确切财务日历期间、周、季度和年份
Requires
- php: ^8.3
- nesbot/carbon: ^3
Requires (Dev)
README
根据网络铁路财务日历,计算任何给定日期的确切财务年度、年内周、季度、期间和期间内周。
安装
财务日历可以作为独立类或作为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();
端点
您可以利用日历作为实例或静态类,并且一些命令支持流畅的接口。
实例
静态
测试
此辅助程序已使用PHPUnit进行测试,以验证准确性和功能,并与实际日历数据进行测试。
- 54个测试,8103个断言
- 验证了2004 - 2035年的计算
- 日期计算
- 接受日期格式
- 类使用