(因为John Conde错误地将其标记为已回答,因为他不理解我的问题,所以我必须编辑这篇文章。)
在我的PHP应用程序中,用户应该能够以strtotime()函数理解的任何格式输入日期。这是输入:
<label>Release Date:</label>
<input type="text" name="release_date"/> <span>Use any valid
date format</span>
<br />
然后索引页面从表单中绘制它并将其存储在数据库中,就像这样......
$release_date = $_POST['release_date'];
并将其显示在列表页面上,如下所示:
<td><?php $date = date('n/j/Y', strtotime($product['releaseDate']));
echo $date; ?></td>
我知道如何将日期从一种格式转换为另一种格式。显示面很好。但是WHERE和HOW如何获取用户输入 - 以任何日期格式输入strtotime()函数可以解释 - 并将其转换为可读格式进入数据库?现在,如果我输入任何不是'xxxx-xx-xx'格式的日期,它将被读为0,并以UNIX 0,1 / 1/1970出现。
谢谢。
答案 0 :(得分:1)
某些日期可以找到,你可以这样做,但是某些日期,例如从1月1日到12日的任何日期都会模棱两可,因为你无法区分月份和日期。如果您允许两位数的年份,那么您在2001年至2012年期间也会遇到问题 - 2001年至2031年的年份与年份相冲突。
您可以要求用户在某些情况下澄清,但这更复杂。
别忘了添加:
$todate = stripslashes(trim($_POST['form-todate']));
杀死任何潜在的SQL注入。
此处还有日期验证:
function validateDate($date, $format = 'Y-m-d H:i:s') {
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
复制
您可以使用各种格式将输入字符串传递给此函数,直到一个或多个匹配项(您可能不希望时间在那里,然后将其取出)。
如果有多个格式匹配 - 请询问用户确认哪一个。
顺便说一句,如果你正在通过网络化这里有一个很棒的bootstrap js技术我曾经使用过(我认为)https://eonasdan.github.io/bootstrap-datetimepicker/
它会在您的输入字段中生成一个迷你日历,这样用户就不必输入任何内容 - 只需点击即可。