1

次の関数がありますが、データベースのタイムスタンプ フィールドが '2012-08-30 11:31:41' および strtotime('-12 時間') の形式の mysql タイムスタンプ タイプであるという問題があります。UNIXタイムスタンプを与えています。

解決策は何ですか?

public function checkIfItemVisited($user_id, $item_id) {

    $timeago = strtotime('-12 hours');
    $params = array(
        ':user_id' => $user_id,
        ':item_id' => $item_id,
        ':timestamp' => $timeago
    );
    $sql = "SELECT `visit_id` FROM `item_visits` WHERE `user_id` = :user_id AND `item_id` = :item_id AND `timestamp` > :timestamp";
    $stmt = $this->query($sql, $params);

    if($stmt->rowCount() > 0) :
        return false;
    else :
        $this->countVisit($user_id, $item_id);
    endif;
}
4

3 に答える 3

2

UNIX_TIMESTAMP()タイムスタンプの比較の問題を解決するには、mysql で使用できます

$sql = "SELECT `visit_id`
        FROM `item_visits`
        WHERE `user_id` = :user_id
               AND `item_id` =  :item_id
               AND UNIX_TIMESTAMP(timestamp) > :timestamp";
于 2012-09-01T07:00:44.303 に答える
2
 ...   AND `timestamp` > NOW() - INTERVAL 12 HOUR ...
于 2012-09-01T07:01:06.730 に答える
0

これを試して:

SELECT FROM_UNIXTIME(1196440219);

逆変換が必要な場合は、これを使用します。

SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');

ソース: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime

于 2012-09-01T07:00:57.773 に答える