依据农历获取阳历/阳历转农历、生日提醒等
项目中常用到生日提醒,且生日通常为农历生日。
本接口使用有限,推荐自定义转化类,链接:PHP阳历转阴历(农历)类,支持生肖、时辰等老黄历
基础方法:
//获取农历生日
function getNongLi($day='')
{
$day = $day?:date('Y-m-d');
$nongli = \sensen\services\HttpService::getRequest('https://api.xlongwei.com/service/datetime/convert.json?day='.$day);
$nongli = json_decode($nongli, true);
$end = $nongli['lunarYear'].'-'.$nongli['lunarMonth'].'-'.$nongli['lunarDay'];
$end = date('m-d', strtotime("{$end}"));
return $end;
}
//获取阳历生日
function getYangLi($day='')
{
if(!$day) return '';
$arr = explode('-', $day);
$nongli = \sensen\services\HttpService::getRequest("https://api.xlongwei.com/service/datetime/yangli.json?lunarYear={$arr[0]}&lunarMonth={$arr[1]}&lunarDay={$arr[2]}");
$nongli = json_decode($nongli, true);
if(isset($nongli['status'])) return '';
return $nongli['day'];
}
生日提醒示例代码(7天前提醒):
$start = getNongLi();
//获取7天后
$noticeDay = date('Y-m-d', strtotime("+7day"));
$end = getNongLi($noticeDay);
//判断生日为当前天的数据
$customer = Db::name('customer')->whereNull('delete_time')->whereRaw("substring(birthday, 6) between '{$start}' and '{$end}'")->select()->toArray();
查询本月生日用户:
$month_start = date('Y-m-01');
$month_end = date('Y-m-d', strtotime("$month_start +1 month -1 day"));
$month_start = getNongLi($month_start);
$month_end = getNongLi($month_end);
$model = $model->whereRaw("substring(birthday, 6) between '{$month_start}' and '{$month_end}'");