来自数据库的Php Mysql日期和时间 - 刚刚获得0或1970

时间:2014-06-23 11:29:04

标签: php mysql datetime

我真的很挣扎,希望有人可以提供一些建议。

我正在编写一个简单的基于Web的系统,包括PHP和Mysql数据库。我已经尝试了很多方法来实现我想要的但没有成功。我想要做的只是在每个记录旁边的数据库中存储一个日期时间,并能够计算记录何时为30天。

我不知道问题是由于参数化的mysql绑定还是其他我做错了。

问题1:

将mysql中的记录日期存储为DATETIME字段。但PHP的strToTime()函数似乎无法理解存储的日期时间 - 它总是返回0或1970!我在数据库中存储的所有内容都来自Php的Time()函数。如果我直接在页面上显示它确实是一个日期 - 所以我无法理解为什么strToTime()失败。

问题2: 在上面花了几个小时之后,我尝试将mysql db字段更改为Integer类型并直接存储Unix Timestamp。但是由于某种原因,在检索存储的值时,它永远不会正确地作为int进行转换,以便对其执行计算。我尝试了(int)cast和intval,并且两者都无法将值强制转换为int ..因此,Date()函数不会对返回的值运行。

问题3: 我尝试在DATETIME字段类型和Int字段类型上使用mysql自己的函数UNIX_TIMESTAMP(),但即使这样也会返回为不想作为int进行计算的字符串。

根本没有意义。显然,我做错了什么,但我无法弄清楚是什么。

//用于存储日期时间的代码:

 $mysqltime = time();
    if ($insert_stmt =  $mysqli->prepare("INSERT INTO quotes (quoteID, userID, creation_date) VALUES (?, ?, ?)")) {
        $insert_stmt->bind_param( 'sss', $quoteID, $_SESSION['user_id'], $mysqltime);

//代码来演示我正在检索存储日期时间的问题:

if ($stmt = $mysqli->prepare("SELECT UID, title, cust, jtitle,     UNIX_TIMESTAMP(creation_date) FROM quotes
   WHERE userID = ? && status = ? 
    ")) {
    $stmt->bind_param('ss', $_SESSION['user_id'], $status );  // Bind to parameters.
    $stmt->execute();    // Execute the prepared query.
    $stmt->store_result();

    // get variables from result.
    $stmt->bind_result( $quoteID, $cust_title, $cust_surname, $job_title, $creation_date);
  //  $stmt->fetch();
 $results =  gmdate("d-m-Y", (int)$creation_date);

1 个答案:

答案 0 :(得分:0)

我个人更喜欢使用mysql over php进行日期和时间管理

使用这样的插入语句:

"INSERT INTO quotes (quoteID, userID, creation_date) VALUES (?, ?, now())"

和一个选择语句,如:

"SELECT UID, title, cust, jtitle, DATE_FORMAT(creation_date,'%d %M %Y')as creation_date".
" FROM quotes WHERE userID = ? && status = ?"