3

私はこのコードを持っています:

$expiration_date='2041-07-14'
           $epoch_timestamp_expiration_date =  strtotime($expiration_date);
       //Get 7 days
       $seven_days_ago=7*86400;
       //subtract seven days from the expiration date.
       $epoch_timestamp_expiration_date-=$seven_days_ago;
       //Format the new expiration date - 7 days ago
       $formatted_epoch_time=date('Y-m-d',$epoch_timestamp_expiration_date);       
       //Todays format.
       $today=date('Y-m-d', time());
       //Todays miliseconds
       $today_secs=strtotime($today);
       //Subtracting expiration date in epoch secs from todays secs
       $diff_secs = abs($epoch_timestamp_expiration_date-$today_secs);
       //Finding the number of days between the two
       $days=floor($diff_secs/86400);
       //Printing output
  echo "<br/><br/>Days: ". $days; 
     echo "<br/><br/>Today: ".$today;
    echo "<br/><br/>Expiration Date : ".$expiration_date;
     echo "<br/><br/>Expiration Date 7 days ago: ".$formatted_epoch_time ; 

      //Is cache near to expire. 7 days closer to the expiration date. 
        if ($epoch_timestamp_expiration_date>$today_secs) {
     echo "<br/><br/>The site isnt about to expire ";
            return "<br/><br/>Cache date isnt about to expire ".$days;
        }

出力がエコーされると、次のようになります。

Days: 15634

今日:2012-10-14

有効期限:2041-07-14

賞味期限7日前:1969-12-25

なんで?

ここで、値をスワップすると、パラメーターは次のようになります。

$expiration_date='2013-07-14';

私は得る:

日数:266

今日:2012-10-14

有効期限:2013-07-14

賞味期限7日前:2013-07-07

サイトの有効期限はもうすぐありません

4

1 に答える 1

5

これは、expiration_date が Unix タイムスタンプ (2038-01-19) を超えているためです: http://en.wikipedia.org/wiki/Unix_time

http://php.net/manual/en/function.date.php

「タイムスタンプの有効な範囲は通常、1901 年 12 月 13 日金曜日 20:45:54 GMT から 2038 年 1 月 19 日火曜日 03:14:07 GMT までです。(これらは、32 の最小値と最大値に対応する日付です。 -bit 符号付き整数) ただし、PHP 5.1.0 より前は、この範囲は一部のシステム (Windows など) で 01-01-1970 から 19-01-2038 に制限されていました。

于 2012-10-14T14:52:56.183 に答える