Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较时间戳_Php_Mysql_Datetime - Fatal编程技术网

Php 比较时间戳

Php 比较时间戳,php,mysql,datetime,Php,Mysql,Datetime,嗨,我的php非常生锈,我不太记得怎么做了 我有一个脚本,我只想每15分钟调用一次。我创建了一个名为last_updated的表。我想做的是在我的脚本顶部有一些代码来查询这个上次更新的表,如果now()减去上次更新的时间超过15分钟,那么运行脚本并将上次更新的时间更新到现在…如果不是,则不运行脚本。这有意义吗 现在我知道当我更新上次更新时,我需要使用Now()来添加新的时间戳,但是我;我不知道如何将now与db值进行比较,看它是否大于15分钟 任何想法您似乎使用MySQL作为DBMS。在这种情况

嗨,我的php非常生锈,我不太记得怎么做了

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

现在我知道当我更新上次更新时,我需要使用Now()来添加新的时间戳,但是我;我不知道如何将now与db值进行比较,看它是否大于15分钟


任何想法

您似乎使用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=?