我正在尝试将包含date_start
和date_end
时间戳记的事件保存到表中。从另一个PHP页面,我得到四个输入:两个日期输入和两个时间输入。我正在尝试插入这些值,但是在插入时不断得到以下值:
0000-00-00 00:00:00
这是我的剧本:
$rep=$bdd->query('SELECT * FROM association WHERE nom="'.$_SESSION['usertag'].'"');
$data=$rep->fetch();
$debut="\'".$_POST['date_start']." ".$_POST['time_start'].":00\'";
$fin="\'".$_POST['date_end']." ".$_POST['time_end'].":00\'";
$debut=date('Y-m-d H:i:s');
$fin=date('Y-m-d H:i:s');
$timestamp_debut =strtotime($debut);
$timestamp_fin = strtotime($fin);
$req=$bdd->query('INSERT into evenement values (NULL,'.$_POST['name'].','.$_POST['content'].',\''.$timestamp_debut.'\',\''.$timestamp_fin.'\','.$data['id'].')');
答案 0 :(得分:0)
PHP的strtotime()
输出Unix时间戳。如果您的数据库列类型为DATETIME,则Unix时间戳不是正确的格式。您只需插入格式化的date()
字符串即可。
例如:
strtotime(date('Y-m-d H:i:s'))
1562117846
date('Y-m-d H:i:s')
2019-07-02 21:36:40
对于MySQL:
MySQL可以识别DATETIME和TIMESTAMP值... [a]是“ YYYY-MM-DD hh:mm:ss ”或“ YY-MM-DD hh: mm:ss ”格式。这里也允许使用“宽松”语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符。例如,“ 2012-12-31 11:30:45”,“ 2012 ^ 12 ^ 31 11 + 30 + 45”,“ 2012/12/31 11 * 30 * 45”和“ 2012 @ 12 @ 31 11” ^ 30 ^ 45'等价。
但是,当您可能想使用从表单中发布的值时,似乎正在使用当前时间戳记。 PHP的date()
使用“如果未提供时间戳记,则为当前时间”。
如果您要改用发布的值,则实际上可以使用strtotime()
将它们转换为Unix时间戳,然后使用date()
对其进行格式化。
$date = '2019-07-02';
$time = '15:28';
date('Y-m-d H:i:s',strtotime($date.' '.$time));
2019-07-02 15:28:00
或者,我可能建议使用PHP的DateTime class:
$date = '2019-07-02';
$time = '15:28';
$datetime = new Datetime($date.' '.$time);
echo $datetime->format('Y-m-d H:i:s');
2019-07-02 15:28:00