0

私が作成しているサイトで、会員データを保存したいのですが、そのデータには簡単に取得できる開始日/参加日がありますが、問題を抱えている有効期限を自動的に計算したい..

基本的に、すべての新規メンバーは毎年 2 月末日に期限切れになるため、たとえば 2013 年 2 月 1 日に入会すると、2014 年 2 月 28 日、2013 年 1 月 3 日または 2013 年 12 月 20 日に入会すると、有効期限が切れます。私の有効期限は 2014 年 2 月 28 日のままです。((うるう年の1日はあまり気にしない))

誰も私がこれを解決する方法を知っていますか - 私はそれがおそらく明らかなことだと知っていますが、私はそれを理解できないようです! :/

(私はphpでこれをやっています)

前もって感謝します、クリス

4

3 に答える 3

3

登録日を Unix タイムスタンプ形式で持っている (または取得できる) と仮定すると、次のことができます。

function calculateExpiry($reg_date)
{
    $next_year = strtotime('+1 year', $reg_date);
    $feb_days = ((($next_year % 4) == 0) && ((($next_year % 100) != 0) || (($next_year % 400) == 0))) ? 29 : 28;
    return strtotime($feb_days.' February '.$next_year);
}

これは常に、翌年の 2 月の最終日を Unix タイムスタンプで返すため、好きなようにフォーマットできます。このロジックは適切だと思います。次の使用例を参照してください。

  • 登録: 01/01/2013、戻り値:28/02/2014
  • 登録: 09/10/2013、戻り値:28/02/2014
  • 登録: 31/12/2013、戻り値:28/02/2014
  • 登録: 01/01/2014、戻り値:28/02/2015
于 2013-02-21T22:35:19.920 に答える
2

これもトリックを行う必要があります:)。

function calculate_expiry( $rawDate ) {

    // Convert data into usable timestamp
    $signupDate = strtotime( $signupDate );
    $cutoffYear = date('Y', $signupDate) + 1;

    // Set the expiry to be the last day of Feb (the first day of March -1)
    $expiryDate = new DateTime();
    $expiryDate->setTimestamp( mktime( 0, 0, 0, 3, 1, $cutoffYear ) );
    $expiryDate->sub( new DateInterval('P1D') );

}
于 2013-02-21T22:38:14.913 に答える
-1

さて、次のようにして現在のサインアップ日を取得します...

$signup_date = date("m-d-Y"); // or time()

そして、それをさらに1年オフセットします

$expire_date = date("m-d-Y", strtotime("+1 year"))
于 2013-02-21T22:09:52.413 に答える