【问题标题】:Condition on date from MySQL with PHP使用 PHP 的 MySQL 日期条件
【发布时间】:2013-03-28 15:23:46
【问题描述】:

我需要一些帮助来解决一个看似简单的问题,但我无法弄清楚它是如何正常工作的

我在 MySQL 中存储了日期,例如 01/02/2012 07:40:23

这个日期被提取到 $list['timeadded'] 变量中的 php 中。

我需要检查当前日期与该日期之间的差异是否小于或等于 7 天,然后我将显示天数的差异,否则回显关闭。

有人可以帮我解决这个问题吗?

谢谢

【问题讨论】:

  • 首先,停止将日期存储为字符串。使用 MySQL 日期时间类型。
  • 它们实际上是 datime 格式,它们不是字符串

标签: php mysql sql time


【解决方案1】:

在您的查询中,我会在该字段上使用 UNIX_TIMESTAMP()。所以:

SELECT
  UNIX_TIMESTAMP(timeadded) AS timeadded
FROM `your_table`

然后,有了这个结果,我会从当前日期中减去它。所以:

$difference = (time()-$list['timeadded']);

我现在有时间差,以秒为单位。您可以使用 date() 将其格式化为天、分钟或小时。

【讨论】:

    【解决方案2】:

    您可以使用此处描述的 datediff 函数:http://www.php.net/manual/en/datetime.diff.php 或者您可以编写自己的函数来计算两个日期之间的差异,方法是将它们转换为 unix 时间戳,然后计算两者之间的秒数,然后计算天数。

    function numberOfDays($datecol) {
         $dateSeconds = strtotime($datecol);
         $now = time();
         $seconds = $now - $dateSeconds;
         //calcualte the number of days 
         $days = $seconds / (60 * 60 * 24);
         return $days
     }
    

    【讨论】:

      【解决方案3】:

      我认为这可能会满足您的需求(将此添加到您的查询中)

      WHERE CURDATE() >= STR_TO_DATE(datecol, "%c/%d/%Y %H:%i:%s") - 间隔 7 天

      PHP 版本

      $list['timeadded'] = '01/02/2012 07:40:23';
      $dt1 = new DateTime($list['timeadded']);
      
      $dt2 = new DateTime();
      $dt2->sub(new DateInterval('P7D'));
      
      $interval = $dt1->diff($dt2);
      echo $interval->format('%d days');
      

      See it in action

      可以获取$interval->d的使用天数

      【讨论】:

      • 我实际上正在寻找一种通过php而不是在sql查询中的方法
      【解决方案4】:

      我现在您正在寻找 PHP 解决方案,但您可以直接在 SQL 中以有效的方式完成这项工作,并且您可以避免签入 php。查看演示 URL 并检查输出。

      http://sqlfiddle.com/#!2/ca91e/26

      表:

      create table t (id int(3), date varchar(40));
      insert into t values (1, '25/03/2013 07:40:23'), 
      (2, '26/03/2013 07:40:23'),
      (3, '20/03/2013 07:40:23');
      

      SQL:

      SELECT id, date_format(curdate(), '%Y-%m-%d %h:%i:%s') AS CurrDate,
      date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s') AS MyDate,
      if(datediff(date_format(curdate(), '%Y-%m-%d %h:%i:%s'), date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s'))<=7,
      datediff(date_format(curdate(), '%Y-%m-%d %h:%i:%s'), date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s')), 'closed') AS Text
      FROM t;
      

      输出:

      ID  CURRDATE                MYDATE                 TEXT
      1   2013-03-29 12:00:00     2013-03-25 07:40:23     4
      2   2013-03-29 12:00:00     2013-03-26 07:40:23     3
      3   2013-03-29 12:00:00     2013-03-20 07:40:23     closed
      

      【讨论】:

        猜你喜欢
        • 2012-09-14
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        相关资源
        最近更新 更多