依据农历获取阳历/阳历转农历、生日提醒等

项目中常用到生日提醒,且生日通常为农历生日。

本接口使用有限,推荐自定义转化类,链接: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}'");

Tags: 笔记

添加新评论