2012-05-10 324 views
-1

我寫了一些代碼來comapre日期,在這裏我得到的問題是當我輸入日期爲2012年/ mar/23給輸出一些正確的時間,有些時候wrong.when我輸入日期爲2012/03/23給出的輸出還有一些錯誤,有時錯誤,我可以解決這個問題嗎?日期比較

<?php 
    $month = 2; 
    $year = 2012; 
    $saturday = strtotime('First Saturday '.date('F o', mktime(0,0,0, $month, 1, $year))); 
    echo date('Y/M/d', $saturday); 
    $sat1 = strtotime($saturday); 
    echo "<br/>"; 
    $season1 = strtotime ('+12 week' , $saturday); 
    $season2= date ('Y/M/d' , $season1); 
    echo $season2; 
    $season = strtotime($season1); 
    echo "<br/>"; 
    $date = $_POST["date"]; 
    echo $date; 
    $date1 = strtotime($date); 
    echo "<br/>"; 
    $abc = strtotime ('+1 week' , $season1); 
    $abc = date ('Y/M/d', $abc); 
    echo "<br/>"; 
    echo $abc; 
    $abc1 = strtotime($abc); 
    if ($date1 <= $abc1) 
    { 
     if ($date1 <= $season) 
     { 
      echo "League already opened"; 
     } 
     else if($date1 > $season) 
     { 
     echo "league successfully closed"; 
     } 
    } 
    else 
    { 
     echo "league 1 closed"; 
    } 
    if(!isset($POST['submit'])) { 
?> 
    <form method="post" action=" "> 
     <label>enter date in YYYY/MM/DD format</label> 
     <input type="text" name="date" size="10" /> 
     <input type="submit" value="submit" name="submit"> 
    </form> 
<? 
    } 
?> 

和輸出它示出了在如果condition.before提交表單

+2

你需要縮進你的代碼! – ThiefMaster

+0

任何人都可以告訴上述代碼的解決方案?。感謝提前 – leela

回答

2

試像這樣:

$date = DateTime::createFromFormat('Y/m/d', '2012/03/23'); 
echo $date->format('Y/m/d'); 

或像這樣:

$date = DateTime::createFromFormat('Y/M/d', '2012/Mar/23'); 
echo $date->format('Y/m/d'); 
+0

非常好 - 不知道那個約​​會日期 - 每天學習新東西:) +1 – Laurence

+0

好的,日期問題解決了。如果條件msg.why在提交表格之前顯示 – leela

+0

ok,日期問題解決了,爲什麼在提交表單之前顯示if條件msg? – leela

0

的strtotime不支持 「Y/M/d」

它將只支持MSG「Y/M/d「(注意小寫字母m)

Click here for a list strtotime支持的格式。

所以,你應該有一個數據類型「Y/M/d」爲你的邏輯,只是格式化顯示爲「Y/M/d」當你要輸出到屏幕爲用戶

+0

我不明白你說什麼?你能否在我的代碼中進行必要的更改... – leela

+1

否 - 你可以花2分鐘再讀一遍我的答案 - 然後查看你的代碼。您的格式爲「Y/M/d」,即「2012/May/10」。你不能通過strtotext轉換。您只能轉換爲「2012/05/10」的「Y/m/d」。你可以改變你的後端代碼,只使用「Y/m/d」 - 或者使用Vyautas發佈的答案來解決你的問題 – Laurence

1

在你的代碼date('Y/M/d')格式是主要問題。它會爲它返回空的時間戳,並因此產生不正確的答案。所以請在這裏使用Y/m/d格式作爲時間。

感謝

0

解決您的問題按照此步驟:

1.Don't使用Y/M/d格式的操作。只能使用Y-m-d格式。

2.「第一個星期六」是從給定的日期算起的。如果給定日期已經是星期六,則計算下一個。

3.You連連圍繞strtotime()date()功能反之亦然支付

4.使用Y/M/d格式,在表示層,如果你想strtotime()星期六,那麼何必再要轉換它在日期格式?

簡而言之,要更加清楚,請將您的表示和操作分開。這是因爲你一次做兩件事情。