date() 回显的正确日期和时间格式,但不能将其正确存储在数据库中


date() which echo's correct date and time format, but doesn't store it correctly in database

我有以下代码片段:

date_default_timezone_set('UTC');
if (!isset($_POST['secret']) && $post_msg != "" ) { // checkbox unchecked processing...
    // Checkbox is selected
    $date_of_msg= date('l jS F Y h:i');
    $msg_sent_by  = $username;
    $insert_query = "INSERT INTO user_thoughts VALUES ('','$post_msg','$date_of_msg','','' ,'$attach_name','$msg_sent_by','yes')";
    $run_query = mysqli_query($connect, $insert_query) or die(mysqli_error());
}

当我回显$date_of_msg时,日期和时间将按预期打印出来,但是当运行上面的以下INSERT查询时,数据库中的字段将存储0000-00-00 00:00:00

将存储$date_of_msg的字段称为post_details,类型为 datetime 。我知道有一个名为date_to_str的函数,并且似乎有与之相关的问题,例如这个。但是该问题的答案是转换手动输入的日期,而我想获取用户发布帖子的时间。我认为解决方案是在插入$date_of_msg变量时使用date_to_str函数?但我无法理解它是如何工作的?

你的

date('l jS F Y h:i');

正在发送如下结果:

星期三 2 三月 2016 10:00

因此,您0000-00-00 00:00:00作为日期时间不匹配而获得该值

将其更改为:

date('Y-m-d h:i:s');

或者使用此文档将日期格式化为您需要的内容。 http://php.net/manual/en/function.date.php

这可能是因为您的Web服务器(apache im guessing)配置与您的mysql配置不同。

所以这就是为什么你遇到一些困惑。

有几种方法可以做到这一点,但它需要您选择一种格式并使用它运行。

  1. 将记录插入 mysql 时,告诉它您要使用的格式。

    $query_manual = "INSERT INTO dateplayground (dp_name, dp_datetime)值("日期时间:手动日期时间","1776-7-4 04:13:54")";

  2. 研究 mysql 和 apache 日期时间配置并修复它们,使它们具有相同的确切日期时间格式。

在 mysql 日期时间字段中,您只能插入格式的日期时间Y:m:d H:i:s

请使用相同格式的日期时间

$date_of_msg = date('Y:m:d H:i:s');