2016-05-20 12 views
0

私はPHPアプリケーションで作業しています。アプリケーションのライセンスのようなアクセスコードを生成しました。通常、インストールの日から1年間です.DBに設定されている有効期限に達するか、または近づくと、メッセージが表示されます。有効期限が切れた日の最後に、ライセンスページにリダイレクトする必要があります。今問題は次のとおりです。期限が切れた場合でも、有効期限が切れるまでに数日間は表示されます。たぶん私のコードが間違っているか、私が選択した日が間違っています。誰でも助けてくれますか?PHPアプリケーションの有効期限を設定する

<?php 
    $se = "SELECT * FROM license WHERE status=1 ORDER BY endDate DESC"; 
    $conf = mysqli_query($connection,$se); 
    $row = mysqli_fetch_array($conf); 
    $tday = new DateTime(date("Y-m-d")); 
    $eday = new DateTime($row['endDate']); 
    $interval =$eday->diff($tday); 
    $diff =$interval->format("%a"); 
    $mth=$interval->m; 
    $days =$interval->d; 
    if($diff<=90){ 
    print '<script type="text/javascript">'; 
    print 'alert("License has expired.Contact me for renewal: [email protected] or Technical Support: mobileNo")'; 
    print '</script>'; 

    }else if($diff<=45){ 
    print '<script type="text/javascript">'; 

    print 'alert("License has expired.Contact me for renewal: [email protected] or Technical Support: mobileNo")'; 
    print '</script>'; 

    }else if($diff<=0){ 
    print '<script type="text/javascript">'; 
    print 'alert("License has expired.Contact me for renewal: [email protected] or Technical Support: mobileNo")'; 
    print '</script>'; 
    echo "<script> document.location='License.php';</script>"; 
    } 

?> 

はDBのレコードを参照してください:すべての DB Record

+0

を:

<?php if($today>$db_expiry_date){ redirect_to(license.php) }else{ contine..... } ?> 

をまた、あなたが使用して残りの日数で遊ぶことができます。私がやるべきすべてが言うことでしょうか? – RJParikh

+0

@RuchishParikh:計算するにはdifferencが必要です – Dave

+0

デフォルトのdate()とstrtotime()を使用してそれを実現することもできます。 @Dave – RJParikh

答えて

2

まずあなたが間隔をフォーマットするとき、あなたは%Rを追加する必要があります:それは、ゼロと比較することを可能にした、+または-と形式の前に付けます(負の値の場合):

$dif = $interval->format('%R%a'); 

第2に、常に同じメッセージを表示します。そしてあなたは正しい順序で比較しません。あなたはこのように比較する必要があります:あなたが好きな場合は、if/elseif/elseステートメントを使用することができます

switch (true) { 
    case ($diff <= 0): 
     // Expired, need renewal 
     break; 
    case ($diff <= 45): 
     // Expires within the next 45 days 
     break; 
    case ($diff <= 90): 
     // Expires within the next 90 days 
     break; 
} 

。しかし、その順序は重要です。そして、メッセージがあまりにも重要です:)

UPDATE

あなたは正しいの差を計算する必要があります。$date_toが大きいのであれば

$interval = $date_from->diff($date_to); 

$interval = $tday->diff($eday); 

は、としてそれを参照してください。 $date_fromより大きい場合、間隔は正の値になります($date_to+$interval日)。

とき$date_to$date_from前に、間隔は($date_to$date_to$interval日前だったこと-$interval日、である)マイナスになります。

あなたのケースでは、$intervalが肯定的な場合、ライセンスは$interval日で有効期限が切れます。それ以外の場合、ライセンスは$interval日の期限が切れています。

+0

私はあなたの提案を試みましたが、まだ動作していません。それはまだ12daysで有効期限を示した。 – Dave

+0

「12日で有効期限が切れます」というコードはどのように表示されますが、コード内のすべてのメッセージに「ライセンスは期限切れです」と表示されますか?正確なコードと試したサンプルで質問を更新してください。 – Arcesilas

+0

私が言っているのはこれです:Dbから、有効期限は2016-05-06です。今日と比較すると。 Expired.Rightが表示されるはずですか?しかし、上のコードに基づいて、それは表示され、ライセンスは45daysで期限が切れます。 switch($ diff){ case($ diff <= 0): echo "期限切れ、更新が必要です"; 休憩。 case($ diff <= 45): echo "次の45日以内に期限が切れます"; 休憩。 case($ diff <= 90): echo "次の90日以内に期限が切れます"; 休憩。 – Dave

0

以下のコードを使用してください。

  • ABS - 絶対値
  • 階 -

端数の切り捨てはstrtotime()で試してみてください。

$date1 = "2016-05-07"; 
$date2 = "2016-05-06"; 
$diff = abs(strtotime($date2) - strtotime($date1)); 

$years = floor($diff/(365*60*60*24)); 
$months = floor(($diff - $years * 365*60*60*24)/(30*60*60*24)); 
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); 
echo $days . "days"; 

出力

1 days 
+0

これは非常に複雑ですが、OPが彼のコードで行ったように、DateTimeクラスはもっと簡単になりました... – Arcesilas

+0

@Ruchish Parikh:これは整数の日付差を与えることができました。しかし、私はこの値が有用であることを発見しましたが、それは私に解決策をもたらさないでしょう。私が望んでいたのはこれです:今日が> db expiry dateの場合、ライセンス画面にリダイレクトしてください。どのようにすれば実現できますか? – Dave

+0

実際には、DSTと閏年が考慮されるため、「DateTime」はより正確です。 – Arcesilas

0

おかげで、すべて。あなたの提案は私を助けてくれました。あなたは日で差をつけたいん

<?php 
    if($diff<=45 && $today<$db_expiry_date){ 
     echo 'License will expire with next 45days'; 
     }elseif($diff<=90 && $today<$db_expiry_date){ 
     echo 'License will expire with next 90days'; 
     }else if($today>$db_expiry_date){ 
     echo 'License Expired'; 
     redirect_to('License.php'); 
     } 
     } 
    ?> 
関連する問題