我在通过html表单将日期正确存储在MySQL数据库表中名为'publicationDate'的列中时遇到问题。

 //  Contruct Of The Data
public function __construct($data=array()) {
if (isset($data['id'])) $this->id = (int) $data['id'];
if (isset($data['publicationDate'])) $this->publicationDate = (int) $data['publicationDate'];
if (isset($data['content'])) $this->content = $data['content'];
}

// Values To Post/Store For The Webpage Forms
public function storeFormValues ($params) {
 $this->__construct($params);
 if (isset($params['publicationDate'])) {
   $publicationDate = explode ('-', $params['publicationDate']);
  if (count($publicationDate) == 3) {
    list ($y, $m, $d) = $publicationDate;
    $this->publicationDate = mktime (0, 0, 0, $m, $d, $y);
   }
  }
 }

我的SQL列“publicationDate”数据类型为“TIMESTAMP()”,不为空“默认值”为“当前时间戳”。日期将被存储并格式化为“0000-00-00 00:00:00”。
“publicationDate”的HTML表单输入是一个隐藏且不可编辑的编辑表单,如下所示:
<input type="hidden" name="publicationDate" id="publicationDate" value="<?php if ($results['article']->id ==true) { echo date("Y-m-d g:i:s", $results['article']->publicationDate);} else { echo date("Y-m-d g:i:s");}?>"/>

它将像这样存储日期-“0000-00-00 00:00:00”,即“yyyy-mm-dd hh:mm:ss”,但只有年、月和日将正确显示。小时、分钟和秒将始终显示在MySQL all zero(00:00:00)中。当显示/列出我的数据“DESC”时,这显然是一个问题,当然,这是最近一次出现在列表的顶部。

最佳答案

因为您希望mysql日期格式为'yyyy-mm-dd hh:mm:ss',所以需要更改php日期格式。
在两种情况下都将date("Y-m-d g:i:s"更改为date("Y-m-d H:i:s"
g格式以12小时格式显示小时,不带前导零
H格式以24小时格式显示小时,前导零。
另外,当您构造$publicationDate时,可以使用hour=0,minute=0,second=0创建它。
如果要用表单提交的时间填充$publicationDate,请使用:
$publicationDate = mktime(date('H'), date('i'), date('s'), $m, $d, $y);
这将从用户处获取当前的小时、分钟和秒以及提交的月、日和年。
实际上,您应该在storeFormValues函数中指定实际时间。
有关mktime

10-06 12:30