php获得去年的范围日期

时间:2018-05-16 09:30:29

标签: php datetime

我在一个带有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。

有什么想法吗?

4 个答案:

答案 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

感谢所有人的帮助