在mysql查询中使用php time()函数计算两个日期之间的差异

Posted

技术标签:

【中文标题】在mysql查询中使用php time()函数计算两个日期之间的差异【英文标题】:calculate difference between two date with php time() function in mysql query 【发布时间】:2013-01-24 20:51:22 【问题描述】:

我已经搜索过这个,但我找不到任何东西。

我有一个文章表。当我写新文章时,我使用 php time() 函数将时间写入 mysql 表。

我的桌子是

id文章时间

时间数据类型为 INT(UNSIGNED)

我的问题是我想显示上周到今天或上个月到今天的文章。

我的 mysql 查询应该如何?

通常我会这样做

SELECT * FROM articles ORDER BY Time DESC

所以这给了我从今天到过去的数据。我该怎么做?我想不出解决办法。我应该一起使用 php-mysql 还是只能用 mysql 来处理?你能给我想法或例子吗?谢谢。

编辑:

我按照建议更改为 datetime,现在我认为我遇到了时区问题

现在我的 ago() 函数工作晚了 2 小时。

<?php 
date_default_timezone_set('Europe/Istanbul'); //timezone function 
ago($time)

   $periods = array("saniye", "dakka", "saat", "gün", "hafta", "ay", "yıl", "baya");
   $lengths = array("60","60","24","7","4.35","12","10");

   $now = time();

       $difference     = $now - $time;
       $tense         = "önce";

   for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) 
       $difference /= $lengths[$j];
   

   $difference = round($difference);

   return "$difference $periods[$j] önce ";
 //ago function 

echo $Date = ago(strtotime($data['WriteTime'])). 'önce';
?>

【问题讨论】:

timeint?它至少是一个 Unix 标记吗?将表更改为使用 time 数据类型。 正如@njk 已经建议的那样:使用Date- 或DateTime-列,然后让MySQL 做一切(意思是:不要使用time() at all:不需要)。 【参考方案1】:

假设您的 time 列是 Unix 时间戳,您可以尝试如下操作:(未测试)

SELECT ... 
FROM magic
WHERE `time` BETWEEN DATE_SUB(FROM_UNIXTIME(`time`), INTERVAL 1 WEEK) AND NOW()

对于您的月份,您将使用INTERVAL 1 MONTH。请将您的列转换为常用数据类型,并且不要使用保留字作为列名。

【讨论】:

【参考方案2】:

首先使time 成为date type field (并给它一个有意义的不同名称,例如article_date

然后使用这个查询:

SELECT  * FROM    articles 
WHERE   article_date BETWEEN CURDATE() - INTERVAL 7 DAY AND CURDATE()

【讨论】:

【参考方案3】:

好吧,您在使用 unix 时间戳整数存储在数据库中时犯了一个初学者错误。您几乎应该始终使用日期/日期时间字段类型,因为您总是需要查询这些字段,这在不使用 unix 时间戳时要容易得多。

因此,将您的字段转换为日期时间,在添加行时使用 MySQL 的 NOW() 将当前时间戳插入字段。

然后查看 MySQL 数据/时间函数以根据您的意愿查询该字段。

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

【讨论】:

@ErdemEce 也许看看 MySQL 中的 TIMESTAMPDIFF 函数。您可以轻松地在 MySQL 中为您计算所有这些数据,而不必担心您的应用程序和 MySQL 之间的不同时区设置。类似SELECT TIMESTAMPDIFF(SECOND, your_field, NOW()), TIMESTAMPDIFF(MINUTE, your_field, NOW()), TIMESTAMPDIFF(HOUR, your_field, NOW()), TIMESTAMPDIFF(DAY, your_field, NOW()), etc.

以上是关于在mysql查询中使用php time()函数计算两个日期之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

mysql之索引失效的情况

MySQL查询缓存

如何使用 PHP 插入查询将当前时间戳插入 MySQL 数据库

MySql

如何在 PHP 函数中正确使用 MySQL 查询? [关闭]

使用 VBA 函数输出的查询中的空日期/时间字段 #Error