2010-06-24 1 views
0

Я вижу, что все хорошие функции даты/времени - это только PHP5, что делает это сложным. Мне нужно создать список всех дат окончания периода оплаты, начиная с 52 недель назад и перехода на один период оплаты в будущем, с двухнедельными периодами.Как я могу сгенерировать список дат окончания периода оплаты в PHP4?

Итак, предположим, что следующий период периода оплаты будет 26 июня 2010 года и сегодня будет 23 июня 2010 года. Мне нужен список, начинающийся с (приблизительно) 26 июня, и заканчивающийся 26 июня 2010 года.

Если дата совпадает с днем ​​окончания периода оплаты, я хочу включить следующее: Если следующий период оплаты заканчивается 26 июня 2010 года, а сегодня 26 июня 2010 года, я бы хотел список, начинающийся с (приблизительно) 26 июня, и заканчивающийся 10 июля 2010 года.

Итак, вот звонок:

>>> get_pay_period_ending_dates($timeInSecondsFromEpoch); 
[ 
    $date52weeksBeforeTheNextPayPeriodEnding, 
    $date50weeksBeforeTheNextPayPeriodEnding, 
    ... 
    $nextPayPeriodEnding 
] 

Очевидно, что это приблизительные даты, которые я хочу. Предпочтительно, в секундах с эпохи.

Каков наилучший способ сделать это, используя только инструменты, доступные в PHP 4.3?

+2

Дайте нам пример желаемого результата, и я постараюсь что-то организовать для вас. Chris –

+0

Это звучит довольно выполнимо с помощью [strtotime] (http://de2.php.net/manual/en/function.strtotime. php) – Gordon

ответ

2

Вы можете получить ужасную работу с strtotime(). Он чувствует себя немного грязным, но это все упрощает.

$startDate = strtotime('June 26, 2010'); 

for($i = 0; $i <= 52; $i+=2) { 
    echo date('m-d-y', strtotime("-$i weeks", $startDate)), "\n"; 
} 

Я считаю, что это достойная отправная точка/доказательство концепции.

Обновление с вычислением даты начала:

function startDate($date) { 
    $knownDate = strtotime('June 26, 2010'); 
    $diff = $date - $knownDate; 
    $weeks = 2 * ceil($diff/(60*60*24*7*2)); 
    return strtotime("$weeks weeks", $knownDate); 
} 

$startDate = startDate(strtotime('June 26, 2011')); 

for($i = 0; $i <= 52; $i+=2) { 
    echo date('m-d-y', strtotime("-$i weeks", $startDate)), "\n"; 
} 

Может быть не совсем точным, но вы должны получить идею.

+0

Это не говорит мне, как найти дату первого дня оплаты после текущей даты; есть ли простой способ сделать это? –

+0

Каковы бизнес-правила для определения даты первого периода оплаты? –

+0

Легче описать последнюю дату периода оплаты, но все с точки зрения конкретной даты. 1. Известно, что 2010-06-26 - дата окончания периода оплаты. 2. Следующей датой периода оплаты с любой даты является дата после указанной даты, кратность двухнедельного периода от известной даты. Возможно, есть более элегантный способ создать это описание, но я не уверен, что это будет. –