我正在尝试学习如何在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功能和内置函数....所以我不能解决它创建我自己的规则或正则表达式(现在,我想如果他看到我哭,他可能会告诉我做我想做的任何事情^^)谢谢
答案 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";
}
}
}