Php 比较时间戳
嗨,我的php非常生锈,我不太记得怎么做了 我有一个脚本,我只想每15分钟调用一次。我创建了一个名为last_updated的表。我想做的是在我的脚本顶部有一些代码来查询这个上次更新的表,如果now()减去上次更新的时间超过15分钟,那么运行脚本并将上次更新的时间更新到现在…如果不是,则不运行脚本。这有意义吗 现在我知道当我更新上次更新时,我需要使用Now()来添加新的时间戳,但是我;我不知道如何将now与db值进行比较,看它是否大于15分钟Php 比较时间戳,php,mysql,datetime,Php,Mysql,Datetime,嗨,我的php非常生锈,我不太记得怎么做了 我有一个脚本,我只想每15分钟调用一次。我创建了一个名为last_updated的表。我想做的是在我的脚本顶部有一些代码来查询这个上次更新的表,如果now()减去上次更新的时间超过15分钟,那么运行脚本并将上次更新的时间更新到现在…如果不是,则不运行脚本。这有意义吗 现在我知道当我更新上次更新时,我需要使用Now()来添加新的时间戳,但是我;我不知道如何将now与db值进行比较,看它是否大于15分钟 任何想法您似乎使用MySQL作为DBMS。在这种情况
任何想法
您似乎使用MySQL作为DBMS。在这种情况下,如果您愿意,您可以让MySQL完成大部分工作:
<?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
}
SELECT
pit < Now()-Interval 15 Minute as mustUpdate
FROM
last_updated
WHERE
siteId=?
选择
pit
pit
是您的日期时间字段,siteId
是您在表中存储多条记录时可能遇到的一些情况(我觉得这是个好主意)。
结果(如果有这样一条记录,且siteId=?
)包含一个字段mustUpdate
,该字段包含0
或1
,1表示pit的值在过去超过15分钟。“我已经创建了一个表[…]now()-MySQL?这不应该由页面加载启动-如果在15分钟的时间间隔内没有人访问该站点怎么办?比如在几小时或几天内。。。其次,从页面加载开始很可能会出现并发问题-如果两个或更多用户加载页面会怎么样?您需要一些东西来检查该值是否尚未设置。如果没有人访问超过15分钟,这不是问题。如果多个用户同时点击页面,那么脚本将为第一个访问者运行,并检查时间戳。如果距离上次更新超过15分钟,那么做一些事情。其他用户将触发相同的脚本,但这次距离上次更新不到15分钟,因此不会执行更新。谢谢。我尝试了触摸文件选项,但是即使我已经设置了文件和目录的权限,我仍然收到一个错误,说触摸文件不能触摸文件。所以我放弃了它,因为出于安全原因,我真的不想设置太多的写权限。您给出的时间戳示例…什么是$lastupdatedtimestamp?这就是我遇到的问题。如果我有一个datetime类型的表字段,并且我在其中输入now(),这给了我类似的信息:2010-02-15 14:23:43…我需要以某种方式转换它以与时间进行比较…您可以在数据库级别使用UNIX_TIMESTAMP()将字段包装在查询中,或者,您可以在代码中使用php函数strotime()运行数据库中的日期值,该函数将许多不同的文本日期转换为unix时间戳。我更新了答案,解释了$lastUpdatedTimeStamp的来源-它是您从数据库中提取的值。我不知道你是否在使用PDO,如果你没有,我可以改变这个例子。
SELECT
pit < Now()-Interval 15 Minute as mustUpdate
FROM
last_updated
WHERE
siteId=?