Php 插入mysql数据库时日期/时间格式不正确

Php 插入mysql数据库时日期/时间格式不正确,php,mysql,Php,Mysql,我有一个php表单,一旦提交,应该在表单提交的日期和时间插入。我想要的格式是:2015年5月13日下午4:30,但我得到的是:1969-12-31 19:00:05。显然,从记录中检索到的日期存在格式错误(1969年12月31日) 在php提交表单上,隐藏字段代码为: <input type="hidden" name="tofiles_post_date" value="<?php echo date('m/d/Y F j, Y, g:i a', time()); ?>"&g

我有一个php表单,一旦提交,应该在表单提交的日期和时间插入。我想要的格式是:
2015年5月13日下午4:30
,但我得到的是:
1969-12-31 19:00:05
。显然,从记录中检索到的日期存在格式错误(1969年12月31日)

在php提交表单上,隐藏字段代码为:

<input type="hidden" name="tofiles_post_date" value="<?php echo date('m/d/Y F j, Y, g:i a', time()); ?>">

显然,我在这里遗漏了一些东西。

问题可能在于MySQL方面:
tofiles\u post\u date
的列的类型是
DATETIME
TIMESTAMP
,而不是字符串。在这种情况下,MySQL希望数据采用YYYY-MM-DD HH:MM:SS格式(文档:)。因此,要在列中插入日期和时间,也必须使用该格式。如果希望按照编写的方式对其进行格式化,那么应该在从数据库检索日期后在输出时对其进行格式化


如果您查看数据库,您可能会发现该列中的数据(当您按照所写的方式插入日期时)是
0000-00-00 00:00:00
,这是MySQL无法理解您的日期时插入的数据。或者至少这是我的怀疑,因为
1969-12-31 19:00:05
可疑地接近UNIX时代,带有一些与时区相关的偏移量。

您正在通过隐藏的表单字段传递表单的日期
05/13/2015-05-13,2015-05-13,4:30 pm
,我看不到你在任何地方把它转换成任何其他的东西——但是在你下面的评论中,你说,你的“日期”栏是
INT
…现在这有什么意义呢

现在,如果让
05/13/2015 2015年5月13日下午4:30
自动转换为整数(这将发生,因为这是您列的数据类型),结果将仅为5,因为在
05
之后,有些字符不能再解释为数字

由于您似乎要再次将该值解释为unix时间戳,因此距离unix纪元(从
1970-01-01
开始)仅5秒。将本地时区添加到组合中,您得到的
1969-12-31 19:00:05
似乎是完全合乎逻辑的–1970-01-01午夜后5秒,以落后5小时的时区进行解释

如果要将unix时间戳作为整数值插入数据库,则还应通过隐藏的表单字段传递一个整数–只需传递
time()
的结果,而无需对其进行格式化

但是您应该真正使用适当的MySQL数据类型,而不仅仅是整数。看一看–
DATETIME
TIMESTAMP
会比较合适。(并不是说后者不能与unix时间戳混淆。)


如果您只想在执行insert查询时插入当前时间值,那么您只需在查询中直接使用MYSQL函数
NOW()
(使用适当的列类型)–无需将日期值从服务器传递到客户端再传递回来(这也使得它容易被操纵;用户可以现在向您发送一个文件,并假装他们在两周或一年前上传了该文件。)

显然,您在这里遗漏了一些内容。但首先,您的
tofiles\u post\u date
列的数据类型是什么?好的,您在评论中还说,这是一个遗留系统。然后,如果目标是将当前unix时间戳值插入INT列,您仍然可以在查询中使用MySQL函数。(否则,如前所述,直接通过表单传递
time()
的结果。)谢谢,Kai。实际上,我计算出了MySQL端。字段结构:Type(timestamp)和Default(CURRENT_timestamp)。现在它检索到正确的日期,但格式错误。当前输出=2015-05-18 16:40:42。所需输出=2015年5月18日下午4:40。当前xml页面上的代码是:Post date。您如何将其获取到所需格式?@BeagleGuy获取所需格式:例如,如果MySQL中的时间存储在
$time
变量中,则use
。基本上,我们没有像上面原始语句那样使用
time()
,而是将其替换为
strotime($time)
,它占用MySQL时间并将其转换为日期函数可以使用的时间戳值。如果我将语句更改为“$date=date($fj,Y,g:ia',strotime($time));”并将元素更改为var(11),则日期错误地显示为“0”。
$title = mysql_real_escape_string($_POST['tofiles_title']);
$body = mysql_real_escape_string($_POST['tofiles_body']);
$link = "http://example.com/uploads/" . mysql_real_escape_string($_POST['tofiles_link']);
$relation = mysql_real_escape_string($_POST['tofiles_relation']);
$type = mysql_real_escape_string($_POST['tofiles_type']);
$date = mysql_real_escape_string($_POST['tofiles_post_date']);
$ip = $_SERVER['REMOTE_ADDR'];
$post_user = $_SESSION['user_id'];

$sql = "INSERT INTO site_tofiles (tofiles_title, tofiles_body, tofiles_link, tofiles_relation, tofiles_type,  tofiles_post_date, tofiles_post_ip, tofiles_post_user) VALUES ";
$sql .= "('$title', '$body', '$link', '$relation', '$type', '$date', '$ip', '$user_id');";
mysql_query($sql);