0

在我正在创建的站点中,我想存储成员数据,并且在该数据中我有一个很容易获得的开始/加入日期,但我想自动计算我遇到问题的到期日期..

基本上所有新成员都将在每年二月的最后一天到期,所以如果我在 2013 年 2 月 1 日加入,我的到期日将在 28/02/2014,如果我在 2013 年 1 月 3 日或 2013 年 12 月加入我的到期日仍然是 28/02/2014。(((我不太介意闰年出现的 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);
}

这将始终以 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()

然后再抵消一年

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