在我正在创建的网站中,我想存储会员数据,并且在该数据中我有一个很容易获得的开始/加入日期,但我想自动计算我遇到问题的到期日期。
基本上所有新成员都将在每年2月的最后一天到期,所以如果我加入2013年2月1日,我的到期时间将是2014年2月28日,如果我加入2013年1月1日或20日/ 12/13我的到期时间仍将是2014年2月28日。 ((我不太关心闰年出现的那一天))
有谁知道我怎么能解决这个问题 - 我知道它可能是显而易见的但我似乎无法掌握它! :/
(我将在php中这样做)
非常感谢, 克里斯
答案 0 :(得分: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时间戳中返回次年2月的最后一天,因此您可以根据自己的喜好对其进行格式化。我认为这种逻辑是合适的,请参阅以下用例:
01/01/2013
,返回:28/02/2014
09/10/2013
,返回:28/02/2014
31/12/2013
,返回:28/02/2014
01/01/2014
,返回:28/02/2015
答案 1 :(得分: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') );
}
答案 2 :(得分:-1)
好吧,我们将通过......来获取当前的注册日期。
$signup_date = date("m-d-Y"); // or time()
然后再将其抵消一年
$expire_date = date("m-d-Y", strtotime("+1 year"))