scort/lunar

中国农历与公历互转,支持范围(1891 ~ 2100)共计210年内的农历与公历互转

V1.0.1 2024-07-22 10:00 UTC

This package is auto-updated.

Last update: 2024-10-27 15:45:23 UTC


README

Chinese Lunar Calendar Component

中文版 ReadMe | English ReadMe

本组件提供了中国(1891年 - 2100年)的公历与农历互转功能:

安装

在项目根目录下,使用composer安装本组件:

composer require scort/lunar

在你的项目中使用

// 引入
use Scort\Lunar\Lunar;

// 农历转换类
$lunar = new Lunar();

1. 公历转农历,公历范围(1891-02-09 ~ 2100-12-31)

/**
 * 公历转农历,公历范围(1891-02-09 ~ 2100-12-31)
 */
 
// 指定日期
$date = date("Y-m-d");
$date = explode("-", $date);

// 转换
$todayLunar = $lunar->solarToLunar(...$date);
var_dump($todayLunar);

结果:

array(2) {
  ["status"]=> int(200)
  ["data"]=> array(8) {
    [0]=> int(2024)
    [1]=> string(6) "六月"
    [2]=> string(6) "十五"
    [3]=> string(6) "甲辰"
    [4]=> int(6)
    [5]=> int(15)
    [6]=> string(3) "龙"
    [7]=> int(0)
  }
}

 当status是200时,就有data结果,索引结果解释如下:
 * status: 200
 * data: 
 *  [0] 农历年
 *  [1] 农历月
 *  [2] 农历日
 *  [3] 天干地支
 *  [4] 农历月的数字
 *  [5] 农历日的数字
 *  [6] 生肖年
 *  [7] 闰几月
 
 当status非200时,没有data,只有msg来描述错误信息
 * status: 非200
 * msg: 错误原因

2. 农历转公历,农历范围(1891-1-1 ~ 2100-12-29)

/**
 * 将农历转换为公历,农历范围(1891-1-1 ~ 2100-12-29)
 *
 * @param $year :农历-年
 * @param $month :农历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于农历有13个月
 * @param $date :农历-日
 */
$lunarYear = 1891;
$lunarMonth = 1;
$lunarDay = 1;
if ($todayLunar['status'] === 200) [$lunarYear, , , , $lunarMonth, $lunarDay] = $todayLunar['data'];
var_dump($lunar->lunarToSolar($todayLunar[0], $todayLunar[4], $todayLunar[5]));

结果:

array(2) {
  ["status"]=> int(200)
  ["date"]=> array(3) {
    [0]=> string(4) "2024"
    [1]=> string(2) "07"
    [2]=> string(2) "20"
  }
}

 当status是200时,就有data结果,索引结果解释如下:
 * status: 200
 * data: 
 *  [0] 公历年
 *  [1] 公历月
 *  [2] 公历日
 
 当status非200时,没有data,只有msg来描述错误信息
 * status: 非200
 * msg: 错误原因

3. 获取指定农历年的闰月,结果:0:代表指定年没有闰月;1~12:代表具体的闰月数

// 获取2024年的闰月
$leapMonth_2024 = $lunar->getLeapMonth(2024);
// 获取2025年的闰月
$leapMonth_2025 = $lunar->getLeapMonth(2025);
var_dump(
    $leapMonth_2024, // int 0
    $leapMonth_2025  // int 6
);

4. 公历年闰年判断

$isLeapYear_2024 = $lunar->isLeapYear(2024);
$isLeapYear_2025 = $lunar->isLeapYear(2025);
var_dump(
    $isLeapYear_2024, // bool true
    $isLeapYear_2025  // bool false
);

5. 获取农历年生肖

$lunarYearZodiacName = $lunar->getLunarYearZodiacName(2024);
var_dump(
    $lunarYearZodiacName // string  ""
);