bradietilley / carbon-zodiac
一个占星术碳包
Requires
- illuminate/support: >=10.0
Requires (Dev)
- laravel/pint: ^1.10
- pestphp/pest: ^2.0
- phpstan/phpstan: ^1.10
- symfony/var-dumper: >=5.0
README
一个简单的包,提供将日期转换为星座和元素的接口。
安装
composer require bradietilley/carbon-zodiac
限制
目前,仅支持1648年至2644年之间的日期。如果您想使用此包处理该范围之外的日期,请提交一个拉取请求,包括您请求更新的NewYears::THRESHOLDS
常量,并请注明您的来源。
用法
您可以使用Carbon
宏、使用BradieTilley\Zodiac\Zodiac
类,或者直接使用每个类/枚举。以下是一些示例
使用Carbon宏
Laravel会自动启动Carbon宏,但如果您需要在非Laravel项目中手动启动它,这非常简单
\BradieTilley\Zodiac\Zodiac::boot();
启动后,或在Laravel应用程序中,您可以使用Carbon
宏获取所需的数据
use Carbon\Carbon; use BradieTilley\Zodiac\Zodiac; use BradieTilley\Zodiac\Sign; use BradieTilley\Zodiac\Element; /** Set up some dummy dates */ $date1 = Carbon::parse('1970-02-05'); $date2 = Carbon::parse('1970-02-06'); /** Convert a date to a zodiac year */ $date1->zodiacYear(); // 1969 $date2->zodiacYear(); // 1970 /** Convert a date to a zodiac sign */ $date1->zodiacSign(); // Sign::ROOSTER $date2->zodiacSign(); // Sign::DOG /** Convert a date to a zodiac element */ $date1->zodiacElement(); // Element::EARTH $date2->zodiacElement(); // Element::METAL
使用Zodiac助手
或者您可能不想使用Carbon
宏,这可以通过Zodiac
助手实现
use Carbon\Carbon; use BradieTilley\Zodiac\Zodiac; use BradieTilley\Zodiac\Sign; use BradieTilley\Zodiac\Element; /** Set up some dummy dates */ $date1 = Carbon::parse('1970-02-05'); $date2 = Carbon::parse('1970-02-06'); /** Convert a date to a zodiac year */ Zodiac::yearFromDate($date1); // Year<1969> Zodiac::yearFromDate($date2); // Year<1970> /** Convert a date to a zodiac sign */ Zodiac::signFromDate($date1); // Sign::ROOSTER Zodiac::signFromDate($date2); // Sign::DOG /** Convert a date to a zodiac element */ Zodiac::elementFromDate($date1); // Element::EARTH Zodiac::elementFromDate($date2); // Element::METAL
目前,仅支持Carbon实例。未来的版本可能会将其扩展到任何DateTimeInterface
。
直接使用类
use Carbon\Carbon; use BradieTilley\Zodiac\Zodiac; use BradieTilley\Zodiac\Sign; use BradieTilley\Zodiac\Element; /** Set up some dummy dates */ $date1 = Carbon::parse('1970-02-05'); $date2 = Carbon::parse('1970-02-06'); /** Convert a date to a zodiac year */ Year::fromDate($date1); // Year<1969> Year::fromDate($date2); // Year<1970> /** Convert a date to a zodiac sign */ Sign::fromDate($date1); // Sign::ROOSTER Sign::fromDate($date2); // Sign::DOG /** Convert a date to a zodiac element */ Element::fromDate($date1); // Element::EARTH Element::fromDate($date2); // Element::METAL
扩展用法
给定一个星座Sign
枚举实例,然后可以通过一些辅助方法找到该星座的更多详细信息
$rooster = Sign::fromDate(Carbon::parse('1970-02-05')): $dog = Sign::fromDate(Carbon::parse('1970-02-06')): $rooster->yinYang(); // Yin $rooster->direction(); // West $rooster->season(); // Mid-Autumn $rooster->fixedElement(); // Metal $rooster->trine(); // 2 $dog->yinYang(); // Yang $dog->direction(); // West $dog->season(); // Late Autumn $dog->fixedElement(); // Earth $dog->trine(); // 3
Year
类
Year
类是一个包装整数年份(例如2024
)的DTO,包括帮助方法来遍历年份、获取相关的Sign
和Element
以及确定年份的开始/结束日期。
示例用法
$year = Year::fromDate(Carbon::parse('2024-02-10')); $year = Year::fromYear(2024); // same as above $year->prev(); // Year<2023> $year->next(); // Year<2025> $year->sign(); // Sign::DRAGON $year->element(); // Element::WOOD json_encode($year->toArray()); /** * { * "year": 2024, * "start": "2024-02-10", * "end": "2025-01-28" * } */
Sign
枚举
Sign
枚举是一个包含12个星座的PHP枚举对象,可以通过from*
方法等方法解决,其他方法在其他文档中也有说明。
示例用法
$sign = Sign::fromDate(Carbon::parse('2024-02-10')); $sign = Sign::fromYear(2024); // same as above $sign; // Sign::DRAGON $sign->value; // dragon $sign->label(); // Dragon json_encode($sign->toArray()); /** * { * "value": "dragon", * "label": "Dragon", * "data": { * "yin_yang": "Yang", * "direction": "East", * "season": "Late Spring", * "fixed_element": { * "value": "earth", * "label": "Earth" * }, * "trine": 1 * } * } */
Element
枚举
Element
枚举是一个包含5个元素的PHP枚举对象,可以通过from*
方法等方法解决,其他方法在其他文档中也有说明。
示例用法
$element = Element::fromDate(Carbon::parse('2024-02-10')); $element = Element::fromYear(2024); // same as above $element; // Element::WOOD $element->value; // wood $element->label(); // Wood json_encode($element->toArray()); /** * { * "value": "wood", * "label": "Wood", * } */
其他用法
可能还有更多功能或与这些对象交互的方式,所以请随意查看代码以查看可能的内容。
问题和注意事项
这里没有保证任何东西都是完美的,但它到目前为止已经正确处理了我尝试的所有日期。如果您发现任何问题,请请在GitHub上创建一个问题。
作者
源代码
农历新年阈值
在NewYears
类中,我已注明来源。向他们和他们的来源表示衷心的感谢。
元素和星座周期
来自各种在线来源,以确保星座和元素的循环正确。目前没有为此提供来源。
元素额外信息
这指的是元素的季节、方向、固定元素、三合等。这些数据来自... 维基百科。请带着怀疑的态度接受它,但据我所知,它是“正确的”🤷
许可证
MIT... 或者是“使用它并享受乐趣,无需担心任何事情”的许可证。
如果您使用它并且愿意分享您的项目名称/URL,请随时在PR中提及它,并在下面或其他地方添加它。
使用情况
- 还没有。lol。