我有一个PHP,它带有用于日期和时间的JS日期选择器,可以将所有字符串以这种格式"19.08.2012@20:18"保存在一个名为$date的变量中。
如果我将此变量直接放在查询中,它会在数据库中写入"0000-00-00 00:00:00"。现在我脑子里有个大黑洞,需要帮助。
如何在数据库中写入正确的选定日期和时间?
对不起,我觉得没那么重要,这是代码。
index.php
<script type="text/javascript">
$(function() {
$("#date").datetimepicker({
dateFormat:'dd.mm.yy',
separator: ' @ '
});
});
</script>
<form action="setting.php" method="post">
<table>
<tr>
<td><label for="date">Date:</label></td>
<td><input type="text" id="date" name="date"/></td>
</tr>
</table>
<input type="submit" name="submit" />
设置.php
if(isset($_POST['save_autoresp'])) {
create($_POST['date']);
header("Location: admin.php");
exit();
} else {
header("Location: index.php");
exit();
}
functions.php
.......
.......
// Write the fields to the table
$query_create = mysqli_query($link, "INSERT INTO table VALUES (null, '$id', '$date')") or die ('Could not connect: ' . mysqli_error($link));
.......
.......
MySQL数据库中的日期字段为"datetime"。
MySQL无法识别您收到的日期格式。您必须首先将其转换为可接受的日期和时间文字,然后才能将其传递给INSERT。
这种转换可以通过两种方式完成:
- 您可以配置JS DateTime选取器,使其返回日期为"YYYY-MM-DD HH:MM:SS"
- 您可以在PHP中进行上述转换
无论你选择哪一种,在保存到数据库时,都要坚持年月日的日期格式,这样你就不会疯狂地发现为什么"08/02"被认为是8月2日而不是2月8日。
您需要转换变量以指定MySQL的正确格式,即YYYY-MM-DD HH:NN:SS。仅此而已。通过向它抛出一些子字符串函数来完成。
如果你直接在查询中写入字符串"19.08.2012@20:18",MySQL根本无法解析它。你必须首先转换它,这取决于字段(列)是INT、TIMESTAMP或DATETIME。
MySQL附带了一些方便的日期计算功能,所以您应该坚持使用DATETIME。
在PHP中,您可以使用gmmktime()
和gmdate()
进行转换。为了让您的生活更轻松,请确保MySQL服务器在UTC运行,并且您的应用程序在将日期插入MySQL之前将其转换为UTC。
获取输出日期时,只需使用适当的date_default_timezone_set()
即可。
您需要将日期转换为mysql日期格式可以使用explode()函数删除"."先从日期开始签名,然后使用mktime()函数生成mysql日期格式的
$date = exolode('.', $_POST['date']);
$unixtime= mktime(0, 0, 0, $date[1], $date[0], $date[2]);
$date1 = date("H-m-d H:i:s", $unixtime);
$final_Date = strtotime($date1);