嘿伙计我是我需要以某种形式获得用户的出生日期...您认为我应该怎么做?我想在文本字段中保持简单,但我还需要验证它。
之后我需要将它存储在我的数据库中,数据库有一个字段是时间戳是正确的还是我应该使用不同的东西? (MYSQL)
我现在正在使用它,但它也会在数据库中显示00:00:00的时间。
我正在使用这个
$DOB = strtotime($DOB);
我该怎么办?有没有更好的办法?这要求他们输入dob,因为YYYY / MM / DD有一种方法可以做得更好......
在此之后我还需要确保他们已经超过18岁。那我该怎么做呢?
答案 0 :(得分:4)
要让用户输入日期,您可以使用类似jQuery's Datepicker的内容:它会允许您的用户输入输入日期,或使用某个日历小部件选择日期。
要在MySQL数据库中存储日期,您应该使用DATE
字段 - 而不是:
DATETIME
,其中包含时间TIMESTAMP
,其中包含时间,仅限于1970 -2038 (对于出生日期感觉不太合适)
要使用strtotime()
,您的日期应该像YYYY-MM-DD
(就像在数据库中一样,使用DATE
字段时),而不是{{1} } DD/MM/YYYY
(这些可能令人困惑)
在PHP中,您还应该使用DateTime
类,而不是UNIX Timestamps:这些仅限于1970-2038 (在32位平台上)。
答案 1 :(得分:2)
将其转换为此日期('Y-m-d',strtotime($ DOB))
答案 2 :(得分:2)
在客户端脚本或HTML文件中:
<form action="myphp.php">
Day
<select size="1" name="day">
<option value="01" label="1st">1st</option>
<option value="02" label="2nd">2nd</option>
...
</select>
Month
<select size="1" name="month">
<option value="01" label="Jan">Jan</option>
<option value="02" label="Feb">Feb</option>
...
</select>
Year <select size="1" name="year">
...
<option value="1979" label="1979">1979</option>
<option value="1980" label="1980">1980</option>
...
</select>
</form>
在你的.php后端:
$DOB = $_REQUEST['year']."/".$_REQUEST['month'].$_REQUEST['day'];
现在$DOB
处于可用格式,您可以根据自己的喜好验证$_REQUEST[...]
。但我建议在HTML页面上使用JQuery以及服务器端验证。
答案 3 :(得分:1)
您应该使用fieldtype“DATE”,它只存储日期部分。否则,您可以在选择时使用选择DATE(fieldname)....
要验证用户年龄,您可以使用DATE_SUB计算从今天开始的年龄,然后减去用户的生日。
答案 4 :(得分:1)
首先你不能使用时间戳存储生日,因为时间戳从1970年开始计算,世界上有一些人超过40,因此使用日期(不是日期时间,因为你不需要存储时间,只是出生日期)
您可以通过简单的文本字段从用户那里获取日期,但是您应该通知他预期的日期格式(d / m / y,m / d / y,...) 2011年2月4日可以代表2011年2月4日或2011年4月2日
在你知道除了你之外你用regex检查输入
例如,$ _POST ['birthday'] = '11 / 3/2011'我们除格式m / d / y
$birthday = $_POST['birthday'];
if(preg_match('/^(\d){1,2}\/(\d){1,2}\/(\d){4}$/',$birthday)){
list($month,$day,$year) = explode('/',$birthday);
// here you should check that $day isn't bigger then days_in_month($month), and $month is between 1-12
if(date('Y')-$year<18){ // you need to take into account $month to be more strict
// user under 18
}
}
希望它有所帮助