无法保存表单中的确切时间戳

时间:2019-07-03 01:15:53

标签: php mysql datetime timestamp

我正在尝试将包含date_startdate_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'].')');

1 个答案:

答案 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'等价。

     

String and Numeric Literals in Date and Time Context


但是,当您可能想使用从表单中发布的值时,似乎正在使用当前时间戳记。 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