2012-05-10 282 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()星期六,那么何必再要转换它在日期格式?

简而言之,要更加清楚,请将您的表示和操作分开。这是因为你一次做两件事情。