-1

我写了一些代码来比较日期,这里我遇到的问题是当我输入日期时 2012/mar/23 给出的输出有时正确,有时错误。当我输入日期为 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>
<?
    }
?>

并在输出中显示 if condition.before 中的 msg 提交表单

4

4 回答 4

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');
于 2012-05-10T06:47:40.183 回答
1

在您的代码date('Y/M/d')格式中是主要问题。它为它返回空时间戳,因此它会生成不正确的答案。所以请在此处使用 Y/m/d 格式作为 strtotime。

谢谢

于 2012-05-10T06:50:28.353 回答
0

strtotime 不支持 "Y/M/d"

它只支持“Y/m/d”(注意小写m)

单击此处获取strtotime 支持的格式列表。

所以你的逻辑应该有一个数据类型“Y/m/d”,当你想为你的用户输出到屏幕时,只需将显示格式化为“Y/M/d”

于 2012-05-10T06:44:00.623 回答
0

要解决您的问题,请按照以下步骤操作:

1.不要使用Y/M/d格式进行操作。仅使用 Ymd 格式。

2.“第一个星期六”是从给定日期计算的。如果给定日期已经是星期六,则计算下一个日期。

3.你一次又一次地为strtotime()anddate()函数付出代价

4.使用 Y/M/d 格式,如果你想要strtotime()星期六在表示层,那你为什么又要转换成日期格式呢?

简而言之,为了更清楚,将您的表示和操作分开。这是因为你同时做这两件事。

于 2012-05-10T07:09:21.427 回答