我的表格看起来像这样:
<td>Starts</td>
<td><label for="mm"></label>
<select name="mm" id="mm">
<option value="">---</option>
<option value="01">Jan</option>
<option value="02">Feb</option>
</select>
<label for="dd"></label>
<select name="dd" id="dd">
<option value="">--</option>
<option value="1">01</option>
<option value="2">02</option>
</select>
<label for="yy">
<input type="text" name="year" id="year" />
</label></td>
供人们选择month | day | year
。但是数据库中的字段是Unix时间戳格式。
任何想法如何获取这些数据并转换为我的数据库的Unix时间戳格式?
答案 0 :(得分:3)
另一种选择,在mysql中:
INSERT ... UNIX_TIMESTAMP('$year-$month-$day') ...
一旦适当的数据清理和SQL注入预防得到了解决。
答案 1 :(得分:2)
这对你很有帮助,非常容易理解。
答案 2 :(得分:1)
<?php
if ($_POST) {
// convert POST to MySQL date format
$date_string = sprintf('%04d-%02d-%02d', $_POST['year'], $_POST['mm'], $_POST['dd']);
// if you need it in a UNIX timestamp, do the following
$unix_timestamp = strtotime($date_string);
}
答案 3 :(得分:0)
<?php
$time = new mktime($hour, $minute, $second, $month, $day, $year);
或.. ..
<?php
$time = new DateTime();
$time->setDate($year, $month, $day);
// set both to 0, otherwise you will get the current time at the given day/month
$time->setTime($hour, $minute);
有很多方法可以在php中执行此操作,花一些时间查看日期/时间函数
答案 4 :(得分:0)
如果表单字段是捕获变量$ mm,$ dd,$ yy,那么
$timestemp = strtotime($yy . '-' . $mm . '-' . $dd);
正如Grigor正确指出的那样,确实会给你一个整数$时间戳(以纪元秒为单位)。但总的来说,这可能只是成功的一半。在您的情况下,Unix时间戳格式使事情变得简单。但是根据您的数据库(以及您的关联驱动程序和数据库抽象层),在某些情况下,您可能需要将其转换为某种形式的日期字符串。例如,Oracle采用YYYY-MM-DD HH:MM:SS形式的日期字符串,该字符串将由
生成$oracle_date_string = gmdate("Y-m-d H:i:s", $timestamp);
答案 5 :(得分:0)
将表单发布回php后,您将最终获得表单数据 特殊的全球$ _POST。如果您的用户完全选择了日期,则会显示代码段 将$ unix_ts设置为日期的unix时间戳。
<?php
$unix_ts = null;
// validate date
if (is_numeric($_POST['dd']) || is_numeric($_POST['mm']) || is_numeric($_POST['year'])) {
if (($tmp = strtotime($_POST['mm']."/".$_POST['dd']."/".$_POST['year'])) !== false) {
$unix_ts = $tmp;
}
} else {
// display error message however you choose
echo "Date not set<br>";
}
if ($unix_ts != null) {
// do query
}
?>