我在通过 html 表单将日期正确存储在列名“publicationDate”下的 MySQL 数据库表中时遇到问题。
// 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()' 'NOT NULL' 默认 'CURRENT_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 中始终显示为全零 (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 的手册
关于PHP 不将日期存储在 MySQL 表列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31286000/