roussks / financial-year
这是一个用于财务年度日期计算的简单库。包括接口和DateTime实现。
Requires
- php: ^7.1 || ^8.0
Requires (Dev)
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^7 || ^8 || ^9 || ^10
This package is auto-updated.
Last update: 2024-10-01 00:05:43 UTC
README
介绍 / 背景 / 目的
在我作为软件开发者/网络开发者的第一个工作环境中,我遇到了需要对财务/会计年度进行不同计算的需求。该业务也恰好有一个非标准的日历财务年度(类型解释见下文)。因此,每次我们需要获取任何类型的报告(交易、汇率、销售等)时,我们都会使用业务分析师提供的一个预定义列表。
这个库旨在以一致的方式解决这个业务问题。
为业务计算周、期、年度和结束日期。
根据维基百科
财务年度(或财务年度,有时也称为预算年度)是政府用于会计和预算目的的期间,不同国家有所不同。它也用于企业和其他组织的财务报告。
组织的财务年度可以基于以下两种方法
- 每年从同一日期开始。
- 这是本库的
calendar
类型。
- 这是本库的
- 每年结束在同一天的星期。
- 这是本库的
business
类型。"财务年度结束"(FYE)是标记财务年度结束的日期。一些公司——例如思科系统[1]——每年都在同一天的星期结束其财务年度,例如最接近特定日期的一天(例如,最接近12月31日的星期五)。在这样的制度下,一些财务年度有52周,而另一些则有53周。
- 这种类型的财务年度,每年总是有364天,并分为13个时期(每个时期有4周,28天)。
- 当前库将容纳52-53周财务年度的方法,即在财务年度结束时添加一个第53周,以覆盖从上一个364天年度中缺失的天数。这是一个业务领域的决策,因此库不计算一年应该是52周还是53周。这需要由用户设置。
- 这是本库的
可以通过RoussKS\FinancialYear\AdapterInterface跟踪可用方法,直到提供完整的README。
要求
- PHP版本 ^7.1 || ^8.0 ( 7.1 < PHP版本 < 8.x.x 根据Composer文档版本约束 )
安装
composer require roussks/financial-year
基本使用
require_once __DIR__ . '/vendor/autoload.php'; // DateTimeAdapter // If instantiating with string, it must be of ISO-8601 format 'YYYY-MM-DD' $startDate = new \DateTime('2019-01-01'); $fy = new \RoussKS\FinancialYear\DateTimeAdapter('calendar', $startDate); echo $fy->getFyEndDate()->format('Y-m-d'); // 2019-12-31
Docker镜像
如果您想贡献,库提供了一个示例Dockerfile以帮助开发。这是使用官方php cli镜像。将Dockerfile.example
文件复制到Dockerfile,取消注释所需的php版本。
但是,您可以使用任何您想要的开发更新和错误修复的方法。
运行测试
该库有一个广泛的测试套件,用于覆盖大多数场景和负路径。
请注意,phpunit在不同版本之间的配置可能有所不同,因此您可能需要将phpunit.xml.dist
文件复制到phpunit.xml
,并进行必要的调整。
./vendor/phpunit/phpunit/phpunit
XDEBUG_MODE=coverage ./vendor/phpunit/phpunit/phpunit
# HTML coverage example
XDEBUG_MODE=coverage ./vendor/phpunit/phpunit/phpunit --coverage-html tests/report
运行静态分析
该库使用PHPStan作为静态分析工具,默认级别设置为5。
./vendor/bin/phpstan analyse
限制
遗憾的是,该库不支持以29、30、31日为起始日期的任何月份的calendar
财务年度类型。
我们预计这类日期在calendar
财务年度中不会有很多使用,因为它们会给会计工作带来相当大的问题。
例如,如果一年从1月31日开始,第一个会计期间是在2月28日结束吗?接下来的会计期间从3月1日开始,实际上跳过了一个月吗?
如果在库的使用过程中,用户遇到了这样的真实业务问题并且可以提供缓解逻辑,我们可以着手实现它。
重要:对于business
类型的财务年度,这是允许的。
未来计划
-
更新Readme文件或创建Wiki页面,包含所有可用方法的更多示例。
-
引入新的扩展库CarbonAdapter,以便直接与Carbon日期时间实例协同工作。
-
引入新的扩展库ChronosAdapter,以便直接与Chronos日期时间实例协同工作。
-
为每个适配器引入Laravel包,具有不同的驱动程序。
版本控制
当前库将使用语义版本控制
非破坏性更改将根据SemVer分类导致次要版本或补丁版本更新。
主要版本发布将不保证向后兼容性。