2012-10-26 48 views
3

我需要編寫一個php腳本,用於確定用戶必須支付的金額,具體取決於他們註冊的日期。後來他們登記,他們付出的越多,所以這裏的爲腳本的基本代碼:
PHP邏輯,與特定日期進行比較

private $date; 

function __construct() { 
    $this->date = getdate(); 
} 

function get_amount() 
{ 
    $day = $this->date["mday"]; 
    $month = $this->date["month"]; 
    $year = $this->date["year"]; 
    $date = $day.$month.$year; 
    switch($date) { 
     case "26October2012": 
      return "800"; 
      break; 
     case "26Novermber2012": 
      return "900"; 
      break; 
    } 
} 

但很明顯,這種情況下,語句不會,因爲它應該工作。因此,如果用戶在2012年10月26日之前註冊,那麼他們將支付800,如果是在11月26日之前,但在10月26日之後,則支付900。那麼我該如何編碼該邏輯?

回答

4

日期只是轉換爲UNIX時間戳,對它們進行比較,以使整個事情變得更加簡單。 參照strtotime函數。

$compare_date = "2012-10-26"; 
$todays_date = date("Y-m-d"); 

$today_ts = strtotime($todays_date);//unix timestamp value for today 
$compare_ts = strtotime($compare_date);//unix timestamp value for the compare date 

if ($today_ts > $compare_ts) {//condition to check which is greater 
    //... 
} 

的strtotime您的日期,時間轉換成整數Unix Timestamp. Unix時間戳被定義爲從午夜開始協調世界時(UTC)已經過去的秒數,1970年1月1日因此,作爲一個整數,很容易比較,沒有字符串操作。

+0

我不明白什麼是做的strtotime真的。 –

+0

它將您的日期時間轉換爲32位整數[unix timestamp](http://en.wikipedia.org/wiki/Unix_time)。 Unix時間戳被定義爲自午夜1970年1月1日協調世界時(UTC)以來經過的秒數。 因此,作爲整數,很容易比較,無需字符串操作。 –

0

你不能使用switch語句範圍比較。

您可以轉換的日期戳,然後做使用if-else比較。

0

創建包含amount其他日期的數組:通它來獲得相應的amount

$amountPerDate = array(
    '2012-10-26' => 800, 
    '2012-11-26' => 900, 
); 

循環:

krsort($amountPerDate); // Recursive sort to check greater dates first 
$date = strtotime($date); // Convert '2012-10-23' to its numeric equivalent for the date comprasion 
$amount = 0; // Default amount value 
foreach ($valuePerData as $date => $amount) { 
    if ($date >= strtotime($date)) { 
     $amount = $amount; 
    } 
}