PHP получить в прошлом году диапазон дат - PullRequest
0 голосов
/ 16 мая 2018

У меня есть пользователь в базе данных с creation_date. Этот пользователь может запускать задание в пользовательском интерфейсе моего приложения, но он ограничен количеством заданий, выполняемых в течение одного года.

Этот пользователь был создан в 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, моя начальная дата должна быть 2018-04-12, а моя конечная дата = 2019-04-11.

Есть идеи?

Ответы [ 4 ]

0 голосов
/ 16 мая 2018

Решение, соответствующее моей потребности:

$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");
    }

Проблема заключалась в том, чтобы определить начальную дату, заключенную в максимальный диапазон за один год, начиная с текущей даты и начиная с даты создания пользователя.

Таким образом, если дата создания пользователя старше одного года, чем у меня +1 год, если нет, возьмите эту дату. дата начала не должна быть больше текущей даты_ времени

спасибо всем за помощь

0 голосов
/ 16 мая 2018
$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
0 голосов
/ 16 мая 2018
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;
}

А для вашего примера:

print_r(getRange('2014-04-12'));

Array
(
    [start] => 2018-04-12
    [end] => 2019-04-11
)

print_r(getRange('2014-09-13'));

Array
(
    [start] => 2018-09-13
    [end] => 2019-09-12
)
0 голосов
/ 16 мая 2018

Сначала получите дату регистрации пользователя из базы данных и разделите ее на год, месяц и день, например

$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"));

Это идея, проверьте, работает ли она для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...