使用场景:会员卡即将到期,客户购买一个月会员卡续期,求的具体到期日期的方法......
代码部分
<?php
namespace app\controller;
use think\facade\Db;
use DateTime;
use DateInterval;
class Membership {
/**
* 续期会员卡
*
* @param int $memberId 会员ID
* @param int $months 续期月数
* @return bool
*/
public function renewMembership(int $memberId, int $months): bool
{
// 1. 获取当前到期时间
$member = Db::name('members')
->where('id', $memberId)
->find();
if (!$member) {
return false; // 会员不存在
}
$expiryDate = $member['expiry_date'];
// 如果到期时间为空,则默认为当前时间
if (empty($expiryDate)) {
$expiryDate = date('Y-m-d H:i:s'); // 当前时间
}
// 2. 计算续期后的时间
$date = new DateTime($expiryDate);
// 创建 DateInterval 对象,表示续期时长 (月)
$interval = new DateInterval('P' . $months . 'M'); // P表示Period,M表示Month
// 将续期时长添加到当前到期时间
$date->add($interval);
// 获取新的到期时间
$newExpiryDate = $date->format('Y-m-d H:i:s');
// 3. 更新到期时间
$result = Db::name('members')
->where('id', $memberId)
->update(['expiry_date' => $newExpiryDate]);
return $result !== false; // 如果更新成功,返回 true, 否则返回 false
}
}
使用方法
<?php
namespace app\controller; class Test {
public function index()
{
$membership = new Membership();
$memberId = 123; // 假设会员ID为 123
$months = 1; // 续期 1 个月
$result = $membership->renewMembership($memberId, $months);
if ($result) {
echo "会员续期成功";
} else {
echo "会员续期失败";
}
}
}