2010-02-18 4 views
2

Пытаясь выяснить способ достижения следующего сценария: -

Пользователь создает начальный период времени, например, 01/01/2013 - 01/07/2013 и период продления, например. каждые 1 месяц.

Я работаю на функцию, которая будет: -

  1. Detect ли дата, переданная в функции (может быть любая дата) падает период, соответствующий требованиям пользователей.

Например: -

Функция может принимать следующую дату 21/02/2019. Исходя из этого мне нужно определить, какие обновления периода пользователь находится в

Так я думал о достижении этой цели является: -.

  1. Добавьте один день до даты пользователей первоначального старта, чтобы получить самое новые дата продления.
  2. Добавить период обновления (1 месяц), чтобы получить новейшую дату окончания.
  3. Продолжайте делать это до тех пор, пока я не определю, какие даты начала и конца даты совпадают в зависимости от типа периода продления пользователей, например. 1 месяц.

Немного странно, но этот вид резюмирует, что я после, но не работает: -

$tmpStartDate=$endDate; 
do{ 
$tmpStartDate=date("Ymd",strtotime($tmpStartDate .'+1 Day')); 
$tmpEndDate=date("Ymd",strtotime($tmpStartDate .'+'.$timingUnitVal .' '.$timingUnit)); 
} while($date<$tmpStartDate&&$date>$tmpEndDate); 

$ ENDDATE дата окончания первоначально введенный пользователем.

+0

это похоже на PHP; если это так, вы можете пометить его так. – xtofl

+0

Я думаю, что сценарий, написанный, немного запутан, и требования неясны. Я думаю, может быть, если вы сможете сделать логику более ясной (то есть, чтобы вы могли объяснить ее в одном или двух предложениях), решение представится. Похоже, что для этого нужно будет использовать три входных значения, а не только один, возможно, вы уточните (похоже, что вы на правильном пути, но с точки зрения использования сравнений strtotime(), просто чтобы этот вопрос мог сделать с повторной записью). –

ответ

1

Из чего я могу собрать из вашего вопроса, что-то примерно по этим строкам было бы более правильным?

function findPeriod($lowerBound, $upperBound, $repeatEvery, $date) 
{ 
    $lowerBound = strtotime($lowerBound); 
    $upperBound = strtotime($upperBound); 
    $repeatEvery = strtotime('+' . $repeatEvery) - time(); 
    $date = strtotime($date); 

    while ($date >= $lowerBound) { 
    if ($date <= $upperBound) { 
     return array($lowerBound, $upperBound); 
    } else { 
     $lowerBound += $repeatEvery; 
     $upperBound += $repeatEvery; 
    } 
    } 

    return false; 
} 
Смежные вопросы