popy / republican-calendar
共和历库
Requires
- popy/calendar: dev-master
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-09-24 03:59:41 UTC
README
这是一个基于法国共和/革命历的popy/calendar实现,它是一个12个月、每月30天的日历,有5天(或闰年的6天)附加日,这些附加日受到了埃及日历的启发。
日期转换器不再受caarmen的工作的启发,但她的工作极大地帮助我理解了日期转换的所有困难。
日期转换处理时区和夏令时,这些时区和夏令时保持为常规的小时跳跃,与常规日期相同的小时/日期,这在一天中提供了一致性。
其他日历
如前所述,革命历是基于埃及日历的,因此CalendarFactory有一个专门的buildEgyptian方法,用于初始化一个埃及日历,只需使用配置(但这仅使用popy/calendar包即可实现)。还可能添加一些埃及日历的变体。
- 科普特
- 埃塞俄比亚
目的
它作为示例/概念证明,以及沙盒。代码在这里测试,最终,如果它有效且这是popy/calendar接口的示例实现,同时也是一个沙盒(谁说垃圾)和改进实验室。大多数popy/calendar工具和接口都源于这个仓库。
用法
获取合适的共和历的最简单方法是使用可配置的工厂。
用法基本上与任何popy/php-calendar实现相同,只有少数添加。
X将输出天个体的名称|分隔两个备选方案,第一个用于常规日期,第二个备选方案(如果存在),用于补充日。
<?php use Popy\RepublicanCalendar\Factory\CalendarFactory; $factory = new CalendarFactory(); $calendar = $factory->buildRepublican(); echo $calendar->format(new DateTime(), 'Y-m-d') . "\n"; echo $calendar->format(new DateTime(), 'l jS F y, X|F, X, y H:i:s') . "\n"; ?>
计算方法
最初的日历定义在插入闰日的位置上有模糊的规则,在解决方案决定(或需要)之前就被放弃了。除了popy/calendar提供的计算器外,还有多个闰日计算器可用。
- RommeOddLeapDay:包装任何计算器,但传输不同的年值,以确保闰年将匹配前20年的闰日。
- RommeWithFixedLeapDay:包装任何计算器,将在前20年(与上述相同的原因)传输不同的年值,然后变为透明。
CalendarFactory将默认为RommeOddLeapDay/Modern配对。
<?php use Popy\RepublicanCalendar\Factory\CalendarFactory; $factory = new CalendarFactory(); $calendar = $factory->buildRepublican([ // Lets use a better leap year calculator 'leap' => 'futuristic', // Will wrap it with RommeWithFixedLeapDay 'leap_wrapper' => 'fixed', ]); echo $calendar->format(new DateTime(), 'Y-m-d'); ?>
格式备选方案
popy/republican-calendar带来一个特殊的格式化程序,如果提供了格式备选方案,它将使用该格式备选方案来格式化埃及补充月份,使用|作为分隔符,类似于popy/calendar本地格式解析器的行为(这意味着相同的格式字符串可以用于格式化和解析日期,并将匹配两个备选方案)。
<?php use Popy\RepublicanCalendar\Factory\CalendarFactory; $factory = new CalendarFactory(); $calendar = $factory->buildRepublican(); $format = 'l jS F Y, X|F, X, Y'; // WIll output "Primidi 1e Vendémiaire 0001, Raisin" echo $calendar->format(new DateTime('1792-09-22 00:00:00'), $format) . "\n"; // Will output "Sans-culottides, jour de la révolution, 0019" echo $calendar->format(new DateTime('1811-09-23 00:00:00'), $format) . "\n"; // Will output 1792-09-22 echo $calendar->parse('Primidi 1e Vendémiaire 0001, Raisin', $format) ->format('Y-m-d') . "\n" ; // Will output 1811-09-23 echo $calendar->parse('Sans-culottides, jour de la révolution, 0019', $format) ->format('Y-m-d') . "\n" ; ?>
时间格式
法国共和/革命历最初带有十进制时间格式(10h,100m,100s),正如埃及的启发一样,取代了十二进制格式(24h,60m,60s),但很快就放弃了,可能是因为更换全国每个时钟的难度和成本很高(因为当时,他们没有智能手表能够升级其应用程序。黑暗的时代。)
所以,根据你对革命的感受,你可以使用一种格式或另一种格式,通过注入适合你需要的TimeConvertor。
CalendarFactory将默认为实际的十进制表示。
趣闻:中国古代的时间系统将一天分为100个相等的部分(刻),每个部分为14分钟24秒,这非常接近我们的四分之一小时,并且完美匹配十进位时间系统中的10分钟。这不是一种互操作性吗?
<?php use Popy\RepublicanCalendar\Factory\CalendarFactory; $factory = new CalendarFactory(); $calendar = $factory->buildRepublican([ 'time_format' => $yourRevolutionaryLevel > 9000 ? 'decimal' : 'duodecimal', ]); echo $calendar->format(new DateTime(), 'Y-m-d H:i:s'); ?>