【问题标题】:How to use timespan in PHP?如何在 PHP 中使用时间跨度?
【发布时间】:2012-06-18 21:57:08
【问题描述】:

我有 2 个字段要填充:每 15 分钟和每小时调用页面的次数。

以下字段是 MySql 中的 DateTime:

$lastAccess15m=$row['lastAccess15m'];
$lastAccessHour=$row['lastAccessHour'];

这些字段是整数:

$accessPer15m=$row['accessPer15m'];
$accessPerHour=$row['accessPerHour'];

我想比较当前时间和$lastAccess15,如果时间距离大于15分钟,则将$lastAccess15的值设置为当前时间,并重置$accessPer15m,否则递增$accessPer15m$lastAccessHour$accessPerHour 也是如此,之后这些值必须保存到 mysql 数据库中。

如何获取当前时间和 $accessPer15m 之间的时间跨度(以分钟/小时为单位)?

【问题讨论】:

  • 你至少试过read the documentation吗?
  • @lanzz 如果可能的话,我想完全用 PHP 来做这件事。我正在使用的表中有很多列,我使用 select * from.... 来选择它们;如果我使用 select timediff(...) as oeu,.... 我觉得这将导致一个相当丑陋的代码
  • @serentei:timespan between two times 表示时间差?
  • @Suresh 是的,这就是我的意思

标签: php mysql datetime time timespan


【解决方案1】:

PHP time():

返回以 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来的秒数为单位测量的当前时间。

MySQL datetime:

DATETIME 类型用于同时包含日期和时间部分的值。 MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式检索和显示 DATETIME 值。支持的范围是“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。

要比较两者,您需要转换其中一个,然后他们执行比较:

$phpDateFromMysql = strtotime( $mysqldate );

$mySqlDateFromPHP = date('Y-m-d H:i:s', $phpdate);

最简单的方法就是将Mysql的值转成time()并进行比较:

看到这个working Example

<?php

// compare if the value from $lastAccess15 is +15min in relation to the current time
$lastAccess15 = '2012-06-01 00:00:00';

$phpDateFromMysql = strtotime( $lastAccess15 );

if ($phpDateFromMysql - $lastAccess15 > 900) {
    $lastAccess15 = date('Y-m-d H:i:s', time());
}

echo $lastAccess15;
?>

注意:if 语句中,您可以执行剩余的操作,甚至可以添加else 子句以在时间不大于15 分钟时执行某些操作(如增加你所指的地方)。


相关阅读材料:

PHPstrtotime 函数

PHPdate函数

PHPelseif/else if控制结构

【讨论】:

    【解决方案2】:

    在 SQL 中还 SELECT NOW() as current_timestamp(以及您的其他选择)。

    在 PHP 中:

    if ((strtotime($row['current_timestamp']) - strtotime($row['lastAccess15m'])) > 900) {
    
     // your code 
    }
    

    strtotime 将TimeStamp 转换为秒,然后您可以将时差与900 秒进行比较。 (15 分钟)。

    【讨论】:

    • 要在 PHP 中以秒为单位获取当前时间,您可以调用 time() - 无需在 SQL 中执行此操作即可将其获取到 PHP。
    • php time() 的当前时间和 SQL 条目上的值可能不一样?特别是如果 php 文件正在连接到远程 SQL。通过在 SQL 中使用 NOW(),您使用的时间范围与“lastAccess15m”字段中使用的时间范围相同。 (至少我是这么认为的)。
    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 2022-01-24
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多