比较时间戳

时间:2010-08-15 14:33:18

标签: php mysql datetime

嗨,我的php非常生疏,我不记得怎么做了。

我有一个脚本,我只想每15分钟拨打一次。我创建了一个名为last_updated的表。我想要做的是在我的脚本顶部有一些代码来查询这个last_updated表,如果 now()减去上次更新的时间大于15分钟,那么运行脚本并将last_updated更新为现在......如果不是不运行脚本。这有意义吗?

现在我知道当我更新last_updated时我​​需要使用now()要添加一个新的时间戳,但我不知道如何比较现在的db值,看它是否超过15分钟

任何想法

2 个答案:

答案 0 :(得分:2)

<?php
$pdo = new PDO('mysql:host=your_host;dbname=your_database', $user, $password, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));

// query the database. change 
$stmt = $pdo->query('SELECT UNIX_TIMESTAMP(last_updated_date) FROM last_updated ORDER BY last_updated_date DESC LIMIT 1');

$lastUpdatedTimestamp = $stmt->fetch(PDO::FETCH_COLUMN);

if ((time() - $lastUpdatedTimestamp) > (60 * 15)) {
    touch($file);
    // do stuff
}

time()以秒为单位显示当前时间。您应该将60 * 15展开到900,我只是提供了两个数字来说明发生了什么。

此外,文件可能比数据库表更好。看看touch() 功能。它会更改文件的修改时间,或者创建一个空文件,当前时间为mod时间(如果不存在)。您可以使用filemtime()

检查文件模式时间
<?php
$lastUpdated = null;
$file = '/path/to/writable/file/with/nothing/in/it';

if (file_exists($file)) {
    $lastUpdated = filemtime($lastUpdated);
}

if (!$lastUpdated || (time() - $lastUpdated) > 900) {
    touch($file);
    // do stuff
}

答案 1 :(得分:1)

您似乎使用MySQL作为DBMS。在这种情况下,如果你想,你可以让MySQL完成大部分工作:

SELECT
  pit < Now()-Interval 15 Minute as mustUpdate
FROM
  last_updated
WHERE
  siteId=?

pit是您的DateTime字段,siteId是您在表格中存储多条记录时可能遇到的情况(这对我来说听起来不错)。
结果(如果有siteId=?的此类记录)包含字段mustUpdate,其中包含01,1表示坑的值大于15过去几分钟。