php,mysql时间差问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php,mysql时间差问题相关的知识,希望对你有一定的参考价值。

表中有个datetime类型字段dtime,我需要从表中提取当前时间与dtime相差不到2个小时的那条记录,然后在php中进一步操作,其中的时间差怎么计算?
比如 现在时间是‘2009-04-22 09:30:00’,我需要取出表中’2009-04-22 09:30:00‘到‘2009-04-22 11:30:00’之间存在的记录

不大明白需求,是要提取跟当前时间相差不到两个小时的记录吗,如果是这样
在sql语句中用UNIX_TIMESTAMP
"select 要读取的字段 from 表 where UNIX_TIMESTAMP(dtime) < (UNIX_TIMESTAMP(now())+2*3600) and UNIX_TIMESTAMP(dtime) >UNIX_TIMESTAMP(now())"
或者
"select 要读取的字段 from 表 where UNIX_TIMESTAMP(dtime) < (".time()."+2*3600) and UNIX_TIMESTAMP(dtime) > '".time()."'"
参考技术A 应该这样写SQL语句:

$now=time();
$next=$now+2*3600;
$SQL="select * from 表 where UNIX_TIMESTAMP(dtime) BETWEEN $now AND $next";

上面的$now、$next、UNIX_TIMESTAMP(dtime) 都是从1970年1月1日0时0分0秒到那个时刻的秒数值,利用这个整数类型的量,非常容易控制时间条件。
参考技术B select * from tb where (UNIX_TIMESTAMP()-dtime)>7200

如何使用 PHP 将 MySQL 时间转换为 UNIX 时间戳?

【中文标题】如何使用 PHP 将 MySQL 时间转换为 UNIX 时间戳?【英文标题】:How to convert MySQL time to UNIX timestamp using PHP? 【发布时间】:2011-06-02 10:39:17 【问题描述】:

有很多关于“UNIX 时间戳到 MySQL 时间”的问题。我需要相反的方式,是的...有什么想法吗?

【问题讨论】:

【参考方案1】:

使用strtotime(..)

$timestamp = strtotime($mysqltime);
echo date("Y-m-d H:i:s", $timestamp);

也检查一下(以 MySQL 方式进行。)

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

【讨论】:

使用 strtotime 时要注意时区。看到这个问题:***.com/questions/10417179/…【参考方案2】:

你可以直接从你的查询中获取mysql的UNIX_TIMESTAMP函数,这里是一个例子:

SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');

同样,你可以传入日期/日期时间字段:

SELECT UNIX_TIMESTAMP(yourField);

【讨论】:

如果该字段是 TIME 字段,只有 DATE、DATETIME 或包含天、月和年的字符串,则该字段将不起作用【参考方案3】:

从我的其他帖子中,获得了一个 unixtimestamp:

$unixTimestamp = time();

转换为mysql日期时间格式:

$mysqlTimestamp = date("Y-m-d H:i:s", $unixTimestamp);

获取一些mysql时间戳:

$mysqlTimestamp = '2013-01-10 12:13:37';

将其转换为 unixtimestamp:

$unixTimestamp = strtotime('2010-05-17 19:13:37');

...将其与一个或一系列时间进行比较,以查看用户输入的时间是否真实:

if($unixTimestamp > strtotime("1999-12-15") && $unixTimestamp < strtotime("2025-12-15"))
...

Unix 时间戳也更安全。在检查(例如)之前的范围检查之前,您可以执行以下操作来检查 url 传递的变量是否有效:

if(ctype_digit($_GET["UpdateTimestamp"]))
...

【讨论】:

【参考方案4】:
$time_PHP = strtotime( $datetime_SQL );

【讨论】:

为什么这个回答问题的一些解释将使回答更有用。 (我知道那里可能还有很多其他的单行答案,但它们还没有被添加) 问题是如何将$mysql_timestamp转换成$php_timestamp,答案是“strtotime”做的,如图。有什么好解释的?【参考方案5】:

您应该在 PHP 中使用 DateTime 而不是 strtotime。你也可以这样看待时区:

$dt = DateTime::createFromFormat('Y-m-d H:i:s', $mysqltime, new DateTimeZone('Europe/Berlin'));
$unix_timestamp = $dt->getTimestamp();

$mysqltime 是 MySQL Datetime 类型,例如。 G。 2018-02-26 07:53:00.

【讨论】:

【参考方案6】:

稍微缩写可以是...

echo date("Y-m-d H:i:s", strtotime($mysqltime));

【讨论】:

简直像个笑话 :)

以上是关于php,mysql时间差问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 将 MySQL 时间转换为 UNIX 时间戳?

php取出mysql表单数据为时间戳,怎么转换成时间格式

Mysql/Php - 当前日期和时间

php时间偏移mysql实时

PHP Mysql获取表上次更新时间和日期[重复]

如何将 MySql 时间戳列更新为 PHP 上的当前时间戳?