php根据公历获得农历,PHP获取阳历或农历的节日函数

PHP获取阳历或农历的节日函数

...@  2012-04-11  0  0  2906

//节日

function festival($today){

$temp=$f_lunar=$f_solar='';

$lunar_cls = new Lunar();

$nl_today  = date("Y-m-d",$lunar_cls->S2L($today));  //获取农历

$arr_lunar=array('01-01'=>'春节','01-15'=>'元宵节','05-05'=>'元宵节','07-07'=>'七夕情人节','08-15'=>'中秋节','09-09'=>'重阳节');

$arr_solar=array('01-01'=>'元旦','02-14'=>'情人节','03-08'=>'妇女节','03-12'=>'植树节','04-01'=>'愚人节','04-08'=>'复活节','05-01'=>'劳动节','05-04'=>'青年节','05-12'=>'护士节','05-31'=>'无烟日','06-01'=>'儿童节','07-01'=>'建党节','08-01'=>'建军节','09-10'=>'教师节','10-01'=>'国庆节','10-31'=>'万圣节','12-24'=>'平安夜','12-25'=>'圣诞节');

$md_lunar=substr_replace($nl_today,'',0,5);

$md_solar=substr_replace($today,'',0,5);

$f_lunar=$arr_lunar[$md_lunar];

$f_solar=$arr_solar[$md_solar];

if(!empty($f_lunar) && !empty($f_solar)){$temp='/';}

return trim($f_lunar.$temp.$f_solar);

}

说明:该主题及内容可以随意免费转发,但转发时请注明来源于“哈喽吧”哦^_^。

赞一个

打赏

回复主题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言函数,可以用来获取指定日期的农历日期: ```c #include <stdio.h> // 农历每个月的天数 int lunar_month_days[] = { 0x1F, 0x10, 0x01, 0x21, 0x12, 0x02, 0x22, 0x14, 0x04, 0x24, 0x16, 0x06 }; // 农历年份信息,包括闰月和每个月的天数 int lunar_year_info[] = { 0x04BD8, 0x04AE0, 0x0A570, 0x054D5, 0x0D260, 0x0D950, 0x16554, 0x056A0, 0x09AD0, 0x055D2, 0x04AE0, 0x0A5B6, 0x0A4D0, 0x0D250, 0x1D255, 0x0B540, 0x0D6A0, 0x0ADA2, 0x095B0, 0x14977, 0x04970, 0x0A4B0, 0x0B4B5, 0x06A50, 0x06D40, 0x1AB54, 0x02B60, 0x09570, 0x052F2, 0x04970, 0x06566, 0x0D4A0, 0x0EA50, 0x06E95, 0x05AD0, 0x02B60, 0x186E3, 0x092E0, 0x1C8D7, 0x0C950, 0x0D4A0, 0x1D8A6, 0x0B550, 0x056A0, 0x1A5B4, 0x025D0, 0x092D0, 0x0D2B2, 0x0A950, 0x0B557, 0x06CA0, 0x0B550, 0x15355, 0x04DA0, 0x0A5B0, 0x14573, 0x052B0, 0x0A9A8, 0x0E950, 0x06AA0, 0x0AEA6, 0x0AB50, 0x04B60, 0x0AAE4, 0x0A570, 0x05260, 0x0F263, 0x0D950, 0x05B57, 0x056A0, 0x096D0, 0x04DD5, 0x04AD0, 0x0A4D0, 0x0D4D4, 0x0D250, 0x0D558, 0x0B540, 0x0B5A0, 0x195A6, 0x095B0, 0x049B0, 0x0A974, 0x0A4B0, 0x0B27A, 0x06A50, 0x06D40, 0x0AF46, 0x0AB60, 0x09570, 0x04AF5, 0x04970, 0x064B0, 0x074A3, 0x0EA50, 0x06B58, 0x055C0, 0x0AB60, 0x096D5, 0x092E0, 0x0C960, 0x0D954, 0x0D4A0, 0x0DA50, 0x07552, 0x056A0, 0x0ABB7, 0x025D0, 0x092D0, 0x0CAB5, 0x0A950, 0x0B4A0, 0x0BA54, 0x0AD50, 0x055D9, 0x04BA0, 0x0A5B0, 0x15176, 0x052B0, 0x0A930, 0x07954, 0x06AA0, 0x0AD50, 0x05B52, 0x04B60, 0x0A6E6, 0x0A4E0, 0x0D260, 0x0EA65, 0x0D530, 0x05AA0, 0x076A3, 0x096D0, 0x04BD7, 0x04AD0, 0x0A4D0, 0x1D0B6, 0x0D250, 0x0D520, 0x0DD45, 0x0B5A0, 0x056D0, 0x055B2, 0x049B0, 0x0A577, 0x0A4B0, 0x0AA50, 0x1B255, 0x06D20, 0x0ADA0 }; // 获取农历年份 int get_lunar_year(int year, int month, int day) { int i, leap_month, is_leap, lunar_year; // 计算从1900年到当前年份之间的闰月数和是否有闰月 for (i = 1900, leap_month = 0; i < 2100 && month > 0; i++) { is_leap = lunar_year_info[i - 1900] & 0x10000; leap_month = is_leap ? (lunar_year_info[i - 1900] & 0xFF) : leap_month; month -= 12 - (is_leap ? 1 : 0); } // 计算当前是否为闰月 is_leap = (leap_month == month) && (month > 0); if (is_leap && day > lunar_month_days[month - 1]) { day -= lunar_month_days[month - 1]; if (month == leap_month + 1) { is_leap = 0; } } // 计算农历年份 lunar_year = i - 1900; if (month > 0) { lunar_year--; } return lunar_year; } // 获取农历月份 int get_lunar_month(int year, int month, int day) { int i, leap_month, is_leap, lunar_month; // 计算从1900年到当前年份之间的闰月数和是否有闰月 for (i = 1900, leap_month = 0; i < 2100 && month > 0; i++) { is_leap = lunar_year_info[i - 1900] & 0x10000; leap_month = is_leap ? (lunar_year_info[i - 1900] & 0xFF) : leap_month; month -= 12 - (is_leap ? 1 : 0); } // 计算当前是否为闰月 is_leap = (leap_month == month) && (month > 0); if (is_leap && day > lunar_month_days[month - 1]) { day -= lunar_month_days[month - 1]; if (month == leap_month + 1) { is_leap = 0; } } // 计算农历月份 if (is_leap) { lunar_month = -month; } else { for (i = 0; i < 12; i++) { if (day > lunar_month_days[i]) { day -= lunar_month_days[i]; } else { break; } } lunar_month = i + 1; } return lunar_month; } // 获取农历日期 int get_lunar_day(int year, int month, int day) { int i, leap_month, is_leap, lunar_day; // 计算从1900年到当前年份之间的闰月数和是否有闰月 for (i = 1900, leap_month = 0; i < 2100 && month > 0; i++) { is_leap = lunar_year_info[i - 1900] & 0x10000; leap_month = is_leap ? (lunar_year_info[i - 1900] & 0xFF) : leap_month; month -= 12 - (is_leap ? 1 : 0); } // 计算当前是否为闰月 is_leap = (leap_month == month) && (month > 0); if (is_leap && day > lunar_month_days[month - 1]) { day -= lunar_month_days[month - 1]; if (month == leap_month + 1) { is_leap = 0; } } // 计算农历日期 if (is_leap) { lunar_day = day; } else { for (i = 0; i < 12; i++) { if (day > lunar_month_days[i]) { day -= lunar_month_days[i]; } else { break; } } lunar_day = day; } return lunar_day; } int main() { int year = 2022, month = 10, day = 1; int lunar_year, lunar_month, lunar_day; lunar_year = get_lunar_year(year, month, day); lunar_month = get_lunar_month(year, month, day); lunar_day = get_lunar_day(year, month, day); printf("阳历日期:%d年%d月%d日\n", year, month, day); printf("农历日期:%d年", lunar_year); if (lunar_month < 0) { printf("闰%d月", -lunar_month); } else { printf("%d月", lunar_month); } printf("%d日\n", lunar_day); return 0; } ``` 该函数假定1900年为农历1年1月1日,输入阳历日期,输出对应的农历日期。输出结果类似于“2022年闰八月十一日”的形式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值