php checkdate,单独检查每个参数

时间:2016-11-04 15:57:14

标签: php date datetime

我正在尝试学习如何在mysql上管理日期,并且我已经练习了练习它。

在输入中,用户必须添加一个格式为dd-mm-YYYY的日期,然后,如果日期有效,我会在数据库中记录,将格式更改为YYYY-mm-dd,因为它是如何存储DATE变量类型(据我所知),但是,我还没有到达......

这是我到目前为止所做的:

HTML

  <form method="POST" action="testing.php">   
        <div>
          <label for="title" class="required">Title</label>
          <input name="title" id="title" type="text" value="" />
        </div>
        <div>
          <label for="date" class="required">Date</label>
           <input name="date" id="date" type="date" value="" />
        </div>
        <button class="submit" type="submit" name="submit">Submit</button>
      </form>

PHP

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING);
    $string_input_date = filter_input(INPUT_POST, 'date', FILTER_SANITIZE_STRING);
   $array_input_date = explode("-", $string_input_date);
  if(!checkdate($array_input_date[1], $array_input_date[0], $array_input_date[2])) { 

       if(checkdate(!$array_input_date[1], $array_input_date[0], $array_input_date[2])) {
            $error_message = "wrong month";  die($error_message);
        } elseif (checkdate($array_input_date[1], !$array_input_date[0], $array_input_date[2])) {
            $error_message = "wrong day";  
        } elseif (checkdate($array_input_date[1], $array_input_date[0], !$array_input_date[2])) {
            $error_message = "wrong year";  
        } else {
              $error_message = "Introduce a valid date"; 
        }  
    } else {
        //success! it is a valid date
    }
} 

我可以看到,它不起作用,但我没有选择如何每个人检查每个参数...目标是,如果是什么时候我必须显示错误消息错误,或月份或年份。

目前,我尝试介绍35-04-2016,它应显示错误消息“错误的一天”,而是显示“引入有效日期”。我知道它显示的是因为我的if-elseif是错误的但是......关于如何分别检查每个参数的任何建议?

PS:我知道我可以用正则表达式来做,或者只是创建自己的规则就像一个月在1-12之间等等,但我的导师说我必须使用php功能和内置函数....所以我不能解决它创建我自己的规则或正则表达式(现在,我想如果他看到我哭,他可能会告诉我做我想做的任何事情^^)

谢谢

2 个答案:

答案 0 :(得分:0)

<强>更新

您可以使用PHP DATE_PARSE方法来实现。

if (false === strtotime($string_input_date)) {
    echo 'Invalid Date';
} else {
    $array_input_date = date_parse(date('Y-m-d H:i:s', strtotime($string_input_date)));

    if (false !== checkdate($array_input_date['month'], $array_input_date['day'], $array_input_date['year'])) 
    { 
        echo 'Valid Date';
    } 
}

答案 1 :(得分:0)

checkdate()仅根据整个日期返回true或false,它不会告诉您哪个部分是错误的。

如果您想知道哪个部分有问题,您需要逐个检查。

if(!checkdate($array_input_date[1], $array_input_date[0], 
    $array_input_date[2])) 
        { 
            if($array_input_date[1] < 0 || $array_input_date[1] > 12) 
            {
                $error_message = "wrong month";  die($error_message);
            } 
            elseif($array_input_date[2] < 0) 
            {
                $error_message = "wrong year";  
            } 
            else
            {
                $last_day = cal_days_in_month(CAL_GREGORIAN, $array_input_date[1], $array_input_date[2]);
                if($array_input_date[0] < 0 || $array_input_date[0] > $last_day)
                {
                    $error_message = "wrong day";
                }
            }
        }