我在一个带有creation_date的数据库中有一个用户。此用户可以在我的应用程序UI中运行作业,但是他受限于一年内要运行的一些作业。
此用户已于2014年创建。我想执行以下操作:
function runJob($user){
$nbRemainingJob = findReminingJobs($user);
if ($nbRemainingJob > 0){
runJob($user);
}
else {
die("no more credits";)
}
}
findReminingJobs($user){
$dateRangeStart = ?; //start date to use
$endRangeStart = ?; //end date to use
$sql = "SELECT count(*) FROM jobs WHERE user_id=?";
$sql .= "AND job_created_at BETWEEN ($dateRangeStart AND $endRangeStart)";
$res = $pdo->execute($sql, [$user->id]);
$done = $res->fetchOne();
return ($user->max_jobs - $done);
}
每个用户的创建生日,$ user-> max_jobs都会重置。
问题是如何找到开始/结束日期?换句话说,我想从用户的创建日期开始获取一系列日期。 例如,如果用户是在2014-04-12创建的,则我的start_date应该是2018-04-12而我的end_date = 2019-04-11。
有什么想法吗?
答案 0 :(得分:0)
首先从db获取用户注册日期,并将其分为年,月和日,如
$register= explode('-', $userCridate);
$month = $register[0];
$day = $register[1];
$year = $register[2];
然后像
一样获得当前年份$year = date("Y");
$dateRangeStart = $year."-".$month."-".$day; //start date to use
现在,检查此日期是否大于今天的日期,然后使用去年作为开始日期
$previousyear = $year -1;
$dateRangeStart = $previousyear ."-".$month."-".$day; //start date to use
$endRangeStart = date("Y-m-d", strtotime(date("Y-m-d", strtotime($dateRangeStart))
. " + 365 day"));
这是一个想法,检查它是否适合你。
答案 1 :(得分:0)
$created='2025-04-12';
$date=explode('-',$created);
if($date[0]<date("Y")){
$newDate=date('Y').'-'.$date[1].'-'.$date[2];
$dateEnding = strtotime($newDate);
$dateEnding = date('Y-m-d',strtotime("+1 year",$dateEnding));
}
else{
$newDate=$created;
$dateEnding = strtotime($newDate);
$dateEnding = date('Y-m-d',strtotime("+1 year",$dateEnding));
}
echo 'starting date is: '.$newDate;
echo '</br>';
echo 'ending date is: '.$dateEnding;
此代码将获取您拥有的日期并将其与当前年份相匹配。如果您提供的日期年份等于或高于当前年份,则开始日期将是您的日期,结束日期将是当前日期+1。否则,如果年份低于我们当前年份(2014年),它将替换当前年份,并在结束日期增加1年。一些示例输出:
输入
$created='2014-04-12';
输出结果为:
starting date is: 2018-04-12
ending date is: 2019-04-12
但是对于输入
$created='2025-04-12';
出局是:
starting date is: 2025-04-12
ending date is: 2026-04-12
答案 2 :(得分:0)
undefined
以你的例子为例:
function getRange($registrationDate) {
$range = array();
// Split registration date components
list($registrationYear, $registrationMonth, $registrationDay) = explode('-', $registrationDate);
// Define range start year
$currentYear = date('Y');
$startYear = $registrationYear < $currentYear ? $currentYear : $registrationYear;
// Define range boudaries
$range['start'] = "$startYear-$registrationMonth-$registrationDay";
$range['end'] = date("Y-m-d", strtotime($range['start'] . ' + 364 day'));
return $range;
}
答案 3 :(得分:0)
符合我需要的解决方案:
$now = new DateTime();
$created_user = date_create($created);
$diff = $now->diff($created_user)->format('%R%a');
$diff = abs(intval($diff));
$year = intval($diff / 365);
if ($year == 0){
$startDate=$created_user->format("Y-m-d");
}else{
$startDate=$created_user->add(new DateInterval("P".$year."Y"))->format("Y-m-d");
}
问题是要定义一个起始日期,该起始日期包含在当前日期的最大一年范围内,并从用户的创建日期开始。
因此,如果用户的creation_date超过一年,而不是我1年,如果没有,请使用此日期。开始日期不得大于当前的date_time
感谢所有人的帮助