【问题标题】:generating dates of previous seven days in php在php中生成前7天的日期
【发布时间】:2010-02-25 21:59:16
【问题描述】:

我需要有关生成相对于今天的过去 7 到 10 天的日期和天数的帮助。如何创建一个准确的时间戳来处理周、月和年的变化?

【问题讨论】:

    标签: php date timestamp


    【解决方案1】:

    最简单的方法是使用time() 函数获取与今天相对应的时间戳;并 7 次从该时间戳中删除 1 天,每次都回显对应于该时间戳的日期:

    $timestamp = time();
    for ($i = 0 ; $i < 7 ; $i++) {
        echo date('Y-m-d', $timestamp) . '<br />';
        $timestamp -= 24 * 3600;
    }
    

    这会给你这个输出:

    2010-02-25
    2010-02-24
    2010-02-23
    2010-02-22
    2010-02-21
    2010-02-20
    2010-02-19
    

    因为时间戳只表示自1970-01-01 以来的秒数,所以时间戳减去一天意味着减去24*3600 秒数。


    在 cmets 之后编辑:

    对于月份和星期的更改,这仍然有效:一天仍然是 24*3600 秒。

    例如,如果您使用这一行而不是我在第一个示例中发布的第一行进行测试:

    $timestamp = strtotime('2010-02-03');
    

    你会得到这个输出:

    2010-02-03
    2010-02-02
    2010-02-01
    2010-01-31
    2010-01-30
    2010-01-29
    2010-01-28
    

    它改变了月份罚款。


    对于闰年,如果我使用这个进行测试:

    $timestamp = strtotime('2008-03-03');
    

    我明白了:

    2008-03-03
    2008-03-02
    2008-03-01
    2008-02-29
    2008-02-28
    2008-02-27
    2008-02-26
    

    看起来不错,因为 2008 年 2 月有 29 天。

    如果我测试:

    $timestamp = strtotime('2009-03-03');
    

    我明白了:

    2009-03-03
    2009-03-02
    2009-03-01
    2009-02-28
    2009-02-27
    2009-02-26
    2009-02-25
    

    看起来也不错。

    【讨论】:

    • 那么月和周的变化呢...?
    • @Allain 和@Anurag :我已经编辑了我的帖子以提供其他几个示例;;你有没有具体的情况,这不起作用?
    • 如果您只显示完整日期,您不会注意到差异,但如果您显示时间戳(日期+时间,您会发现问题。
    • 也不会处理 dst。因此,它可能会跳过一天。
    【解决方案2】:

    如果您有幸能够使用 PHP 5.3(为什么不呢?),那么 DateTime/Interval/Period 类也将非常有用。以下示例打印相对于今天的前 7 天(以及今天)的日期。

    $start  = new DateTime('-7 days', new DateTimeZone('UTC'));
    $period = new DatePeriod($start, new DateInterval('P1D'), 7);
    
    foreach ($period as $date) {
        var_dump($date->format('D d-m-Y'));
    }
    

    输出类似:

    string(14) "Thu 18-02-2010"
    string(14) "Fri 19-02-2010"
    string(14) "Sat 20-02-2010"
    string(14) "Sun 21-02-2010"
    string(14) "Mon 22-02-2010"
    string(14) "Tue 23-02-2010"
    string(14) "Wed 24-02-2010"
    string(14) "Thu 25-02-2010"
    

    使用strtotime 可以相对轻松地完成类似的操作,如下面的 sn-p(产生与上面相同的输出):

    for ($i = 7; $i >= 0; $i--) {
        var_dump(date('D d-m-Y', strtotime("-$i days")));
    }
    

    【讨论】:

      【解决方案3】:

      使用strtotime()

      for($i = 1; $i <= 10; $i++){
          echo strtotime("-$i days"), PHP_EOL;
      }
      

      另请参阅此相关问题和答案:

      【讨论】:

        【解决方案4】:

        要生成过去 10 天(包括今天)凌晨 12 点的时间戳,可以使用以下代码:

        <?php
        for ($i=0; $i<=10; $i++) {
          echo mktime (0, 0, 0, date('m'), date('d')-$i, date('Y'));
        }
        ?>
        

        【讨论】:

        • 它会处理月份和星期的变化。那么闰年呢..?
        【解决方案5】:

        您需要的一切都可以在this page of the php manual 中找到。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-17
          • 1970-01-01
          相关资源
          最近更新 更多