Php 从NOW()函数中获取相对日期

Php 从NOW()函数中获取相对日期,php,mysql,datetime,Php,Mysql,Datetime,我试图从MySQLNOW()函数中获取相对日期和时间(比如2秒前,3天前,12月31日…),但我不知道如何获取!有什么想法吗?非常感谢你 使用函数。见示例: SELECT TIMESTAMPDIFF(SECOND, `stamp_column`, NOW()) as `seconds` FROM `YourTable` 或使用此存储函数: CREATE FUNCTION `PassedSince`(`stamp` TIMESTAMP) RETURNS VARCHAR(100)

我试图从MySQL
NOW()
函数中获取相对日期和时间(比如2秒前,3天前,12月31日…),但我不知道如何获取!有什么想法吗?非常感谢你

使用函数。见示例:

SELECT
    TIMESTAMPDIFF(SECOND, `stamp_column`, NOW()) as `seconds`
FROM
    `YourTable`
或使用此存储函数:

CREATE FUNCTION `PassedSince`(`stamp` TIMESTAMP)
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
DECLARE `result` VARCHAR(100) DEFAULT '';
DECLARE `seconds`, `minutes`, `hours`, `days` INT;

SET `seconds` = TIMESTAMPDIFF(SECOND, `stamp`, NOW());

SET `days`    = `seconds` DIV (24 * 60 * 60);
SET `seconds` = `seconds` MOD (24 * 60 * 60);

IF `days` > 0
THEN SET `result` = CONCAT(`result`, `days`, ' Days ');
END IF;

SET `hours`   = `seconds` DIV (60 * 60);
SET `seconds` = `seconds` MOD (60 * 60);

IF `hours` > 0
THEN SET `result` = CONCAT(`result`, `hours`, ' Hours ');
END IF;

SET `minutes` = `seconds` DIV 60;
SET `seconds` = `seconds` MOD 60;

IF `minutes` > 0
THEN SET `result` = CONCAT(`result`, `minutes`, ' Minutes ');
END IF;

IF `seconds` > 0
THEN SET `result` = CONCAT(`result`, `seconds`, ' Seconds ');
END IF;

RETURN TRIM(`result`);
END
查询:

SELECT
    `PassedSince`('2013-06-19 08:00') as `result`
UNION ALL
SELECT
    `PassedSince`('2013-01-01 00:00')
显示:

result
--------------------------------------
1 Hours 20 Minutes 55 Seconds
169 Days 9 Hours 20 Minutes 55 Seconds
使用函数。见示例:

SELECT
    TIMESTAMPDIFF(SECOND, `stamp_column`, NOW()) as `seconds`
FROM
    `YourTable`
或使用此存储函数:

CREATE FUNCTION `PassedSince`(`stamp` TIMESTAMP)
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
DECLARE `result` VARCHAR(100) DEFAULT '';
DECLARE `seconds`, `minutes`, `hours`, `days` INT;

SET `seconds` = TIMESTAMPDIFF(SECOND, `stamp`, NOW());

SET `days`    = `seconds` DIV (24 * 60 * 60);
SET `seconds` = `seconds` MOD (24 * 60 * 60);

IF `days` > 0
THEN SET `result` = CONCAT(`result`, `days`, ' Days ');
END IF;

SET `hours`   = `seconds` DIV (60 * 60);
SET `seconds` = `seconds` MOD (60 * 60);

IF `hours` > 0
THEN SET `result` = CONCAT(`result`, `hours`, ' Hours ');
END IF;

SET `minutes` = `seconds` DIV 60;
SET `seconds` = `seconds` MOD 60;

IF `minutes` > 0
THEN SET `result` = CONCAT(`result`, `minutes`, ' Minutes ');
END IF;

IF `seconds` > 0
THEN SET `result` = CONCAT(`result`, `seconds`, ' Seconds ');
END IF;

RETURN TRIM(`result`);
END
查询:

SELECT
    `PassedSince`('2013-06-19 08:00') as `result`
UNION ALL
SELECT
    `PassedSince`('2013-01-01 00:00')
显示:

result
--------------------------------------
1 Hours 20 Minutes 55 Seconds
169 Days 9 Hours 20 Minutes 55 Seconds

您必须事先指定时间,或者在您的情况下指定秒数

让我用一个简单的例子,基于PDO Mysql查询来说明我的意思

$time = '0:01:00'; // one minute

$stmt = $conn->prepare("SELECT chat_user FROM chatters  
                        WHERE TIMEDIFF(NOW(), login_time) < TIME (?) );
$time='0:01:00';//一分钟
$stmt=$conn->prepare(“从聊天室中选择聊天室用户
其中TIMEDIFF(NOW(),login_time)

在上面的示例中,如果使用查询,您实际上将搜索登录时间小于
$time
01:00:00

的用户,您必须事先指定时间,或者在您的情况下指定秒数

让我用一个简单的例子,基于PDO Mysql查询来说明我的意思

$time = '0:01:00'; // one minute

$stmt = $conn->prepare("SELECT chat_user FROM chatters  
                        WHERE TIMEDIFF(NOW(), login_time) < TIME (?) );
$time='0:01:00';//一分钟
$stmt=$conn->prepare(“从聊天室中选择聊天室用户
其中TIMEDIFF(NOW(),login_time)

在上面的例子中,如果您使用查询,您实际上是在搜索登录时间小于
$time
01:00:00

的用户,php中没有
NOW()
fonction这里是mysql fonction…对不起,它在mysql中,您想查看add date\u add和date\u subtract`SELECT.,NOW()-间隔1天作为yeseterday。。。etcthen DATEDIFF(NOW(),YOUR_DATE)php中没有
NOW()
foction这里是mysql函数…对不起,它在mysql中。您想查看添加日期和日期减去`SELECT..NOW()-间隔1天作为yeseterday。。。等DATEDIFF(现在(),你的约会)它不适合3天前,1小时前。从mysql获取后,恐怕还需要做更多的if/else。我不喜欢任何地方的背景标记,但那只是我。@AaronJiang是的。给我点时间(我不是一个能在纳秒内计算的人工智能。存储函数就是一种方式。类似这样的东西有一些关于如何获得时间差的论文?它不适合3天前,1小时前。从mysql获取后,恐怕还需要做更多的if/else。我不喜欢任何地方的背景标记,但那只是我。@AaronJiang是的。给我点时间(我不是一个能在纳秒内计算的人工智能。存储函数就是一种方式。类似于这样,有一些关于如何获得detimestampdiff的论文?