【问题标题】:Date Range In PHP?PHP中的日期范围?
【发布时间】:2010-10-12 06:29:14
【问题描述】:

我有一个由第三方供应商创建的数据库,我现在正在为其编写新的 UI。

数据库将事件开始时间存储为 unix 时间戳(以 GMT 为单位)。我需要做的是查询这一天的范围。所以大概我只需要做一个:

SELECT * WHERE start > $last_night_at_midnight AND start < $tonight_at_midnight

我遇到的问题是在 PHP 中组合日期/时间函数以创建这些变量的简单方法。对于这么简单的程序,感觉我所做的一切都太复杂了。

有没有人有一个简单的解决方案?

干杯

【问题讨论】:

    标签: php sql datetime


    【解决方案1】:

    查看 PHP 的 strtotime() 了解纯英语到 unix 时间的转换。

    这让您可以使用“今天午夜”和“明天午夜”以及其他类似的结构,正如 Paolo Bergantino 所演示的那样。

    【讨论】:

      【解决方案2】:

      strtotime - 有史以来最棒的 PHP 时间函数。

      $last_night_at_midnight = strtotime("today midnight");
      $tonight_at_midnight = strtotime("tomorrow midnight");
      

      【讨论】:

      • midight 会给你午夜 today,这是过去,而不是未来。
      • 如果我这样做: echo strtotime('2009 年 3 月 10 日午夜');结果是 1236657600,即晚上 11 点。任何想法为什么会发生这种情况?夏令时?
      【解决方案3】:

      这是一种非常倒退的方式,但如果您需要能够处理各种日期范围,而不仅仅是今天或某一天,您可以结合两种语言的奇数时间/日期功能并使用:

      $php_start = strtotime("Some valid date expression");
      $php_end = strtotime("Some other valid date expression");
      
      $result = my_sql_query("
                Select * FROM someDB 
                WHERE DATE(FROM_UNIXTIME(date_column)) 
                BETWEEN FROM_UNIXTIME($php_start) AND FROM_UNIXTIME($php_end)");
      

      在查询中使用 DATE() 可确保 sql 不会费心查看数据的时间部分,并且对所有三个使用 FROM_UNIXTIME 意味着 sql 服务器在派生日期的方式上是一致的。

      我最喜欢的获取今天日期范围的方法是:

        $today_start = strtotime("today");
        $today_end = strtotime("+1 day", $today_start);
      

      strtotime 实际上更好,我发现,然后添加 86400 或类似的东西,因为 strtotime 更好地处理 DST。上周发现的。

      【讨论】:

      • 如果您在进行日期/时间操作或比较时最小单位小于一天,请不要尝试自己编写代码:使用库。他们已经解决了夏令时错误之类的问题。
      • 使用 DATE() 函数否定了我需要进行“x 和 y 之间”查询的需要,而我只是说 if date() = date() 并且它会以这种方式剥离时间我希望。
      【解决方案4】:

      strtotime 在这里很有用...

      $t1=strtotime("today");
      $t2=strtotime("tomorrow");
      
      $sql="select * from foo where timecol between $t1 and $t2";
      

      在撰写本文时 (09-03-2009 19:06),今天相当于 09-03-2009 00:00:00,明天相当于 10-03-2009 00:00:00

      【讨论】:

        【解决方案5】:

        如果您需要选择任意日期,请使用gmmktime

        【讨论】:

          【解决方案6】:

          PHP 中的 time() 函数可能在这里有用:http://be2.php.net/manual/en/function.time.php

          更具体地说,该页面上给出的示例可能会告诉您您需要了解的内容。看看第三条 echo 语句

          【讨论】:

            【解决方案7】:

            您可以在 PHP 或 Mysql 中创建这些变量...

            $tonight_at_midnight    = mktime(0,0,0);
            $last_night_at_midnight = $tonight_at_mindnight - 86400; 
            

            另一种可能性是在 SQL 中:

            
            SELECT * FROM tbl1 WHERE start > UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
            AND start < UNIX_TIMESTAMP(CURDATE())
            

            (未测试)

            【讨论】:

              猜你喜欢
              • 2013-04-14
              • 2014-01-07
              • 1970-01-01
              • 1970-01-01
              • 2011-08-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多