【问题标题】:Checking if mySql datetime is older then 1 day from php now()从 php now() 检查 mySql 日期时间是否早于 1 天
【发布时间】:2011-03-05 18:41:08
【问题描述】:

我有一条从 MySQL 返回的具有日期时间字段的记录。我想要做的是取这个值,看看它是否早于 24 小时,我假设使用 PHP 的 time() 来获取当前时间。

目前,如果我回显它们,我会得到:

 1276954824            this is php's time()
 2010-06-19 09:39:23   this is the MySQL datetime

我认为最上面的是unix时间?一直在玩strtotime,但没有多大成功..

欢迎任何帮助!

【问题讨论】:

    标签: php mysql datetime


    【解决方案1】:

    你为什么混合 PHP 时代和 MySQL 时代?

    相反,直接在 MySQL 中进行比较:

    要在 MySQL 中获取当前日期/时间,请使用 NOW() 函数。您可以比较,例如2010-06-19 09:39:23' < DATE_SUB(NOW(), INTERVAL 1 DAY)

    这将检查给定日期(可能在列中)是否早于 24 小时。

    如果绝对需要将 MySQL 时间戳转换为 UNIX 时间戳,您可以使用 MySQL 的 UNIX_TIMESTAMP() 函数来执行此操作。

    【讨论】:

    • 我会这样做,但目前无法访问查询,所以这就是为什么我需要使用返回的值。
    【解决方案2】:

    没有成功?

    echo strtotime("2010-06-19 09:39:23");
    

    给我

    1276940363
    

    mktime(9, 39, 23, 6, 19, 2010) 给出的时间相同,因此解析正常)


    要获得以秒为单位的差异,您可以减去时间戳,例如

    $diff = time() - strtotime("2010-06-19 09:39:23");
    

    如果差异大于 86400 (60*60*24) 秒,则时间戳相差超过一天:

    if(time() - strtotime("2010-06-19 09:39:23") > 60*60*24) {
       // timestamp is older than one day
    }
    

    【讨论】:

    • 非常感谢,今天我的头好像没拧好!
    【解决方案3】:

    你也可以这样做:

    SELECT * FROM my_table WHERE timestamp < NOW() - INTERVAL 1 DAY;
    

    【讨论】:

      【解决方案4】:

      我写了一个函数,通过它你可以确定第一个给定日期是一天还是比第二个给定日期大或小 n 天。

      $date1 = "2013/03/01";
      $date2 = "2013/03/01";
      $sign  = "-";
      $diff  = 1;
      $result = isDaysSmallerBigger($date1, $date2, $sign, $diff);
      var_dump($result);
      
      /**
       * Note: this function is only supported in php 5.3 or above
       * 1. If $date1 - $date2 = $sign $diff days, return true;
       * 2. If $date1 equals $date2 and $diff euqals 0, whether $sign is "+" or "-", return true
       * 3. Else return false; 
       * @param unknown_type $date1
       * @param unknown_type $date2
       * @param string $sign: "-": $date1 < $date2; "+": $date1 > $date2; 
       * Besides if $diff is 0, then both "-" and "+" means $date1 === $date2;
       * @param integer $diff: date difference between two given dates
       */
      function isDaysSmallerBigger($date1, $date2, $sign, $diff) {
          $dateTime1 = new DateTime($date1);
          $dateTime2 = new DateTime($date2);
      
          $interval = $dateTime2->diff($dateTime1);
          $dayDiff  = $interval->format('%a');
          $diffSign = $interval->format('%R'); 
      
          if((int)$dayDiff === (int)$diff) {
              // Correct date difference
      
              if((int)$diff !== 0) {
                // Day difference is not 0
                if($diffSign === $sign) {
                  return true;
                } else {
                  return false;
                }
              } else if((int)$diff === 0) {
                // Day difference is 0, then both given "+" and "-" return true
                return true;
              } 
          } else {
              // Incorrect date difference
              return false;   
          }   
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-05
        • 2017-03-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2011-04-05
        • 2015-01-04
        • 1970-01-01
        相关资源
        最近更新 更多