2010-06-24 23 views
0

我看到所有的好日期/時間函數都只是PHP5,這種做法很難。我需要生成一個所有薪酬期間結束日期的列表,從52周開始,並在未來支付一個期間,每兩週一次。所以,假設下一個薪酬期結束時間是2010年6月26日,而今天是2010年6月23日,我想要一個以(大約)6月26日,開始,到2010年6月26日結束的列表。如何在PHP4中生成薪酬期限結束日期列表?

如果日期與付款期結束的同一天,我想包括下一個:如果下一個付款期結束於2010年6月26日,而今天是2010年6月26日,我想要(約)6月26日,開始並以2010年7月10日結束的列表。

因此,這裏是電話:

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

很明顯,這是我想要的日期的近似值。優選地,自時間以秒爲單位。

這樣做的最好方法是什麼,只使用PHP 4.3提供的工具?

+2

給我們所需的輸出的一個例子,我會盡力安排克里斯 – 2010-06-24 17:59:16

+0

東西給你這聽起來很可行與[的strtotime(http://de2.php.net/manual/en/function.strtotime。 php) – Gordon 2010-06-24 18:01:20

回答

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

這並不告訴我如何找到當前日期後的_f​​irst_支付期限日期;有沒有簡單的方法來做到這一點? – 2010-06-24 18:27:11

+0

確定第一個付款期限日期的業務規則是什麼? – 2010-06-24 18:38:11

+0

更容易描述最後一個付款期限日期,但是全部以特定日期爲準。 1.衆所周知,2010-06-26是薪酬期結束日期。 2.任何給定日期的下一個付款期限日期是指給定日期之後的日期,即距離已知日期兩週的倍數。 這可能是一種更優雅的方式來描述該描述,但我不確定它會是什麼。 – 2010-06-24 18:47:35

相關問題