【问题标题】:How to retrieve an array of each date within two epochs如何在两个时期内检索每个日期的数组
【发布时间】:2011-09-19 15:18:24
【问题描述】:

我有两个时代。我想找出两个时期内有效的所有日期。

例如,如果我有纪元 946684800(2000 年 1 月 1 日星期六 00:00:00 GMT)和 947203200(2000 年 1 月 7 日星期五 00:00:00 GMT),我希望能够得到:01 /01/2000、02/01/2000、03/01/2000、04/01/2000 等

【问题讨论】:

    标签: php date time timestamp epoch


    【解决方案1】:

    如果您有 PHP 5.3 或更新版本,您可以这样做:

    $date1 = new DateTime;
    $date1->setTimestamp(946684800);
    
    $date2 = new DateTime;
    $date2->setTimestamp(947203200);
    
    $interval = new DateInterval('P1D');
    
    while ( $date1 <= $date2 )
    {
      $dates_in_between[] = $date1->getTimestamp();
      $date1->add($interval);
    }
    

    或者,你可以使用这个:

    // 1 day = 60 seconds * 60 minutes * 24 hours = 86400
    for ($date = 946684800; $date <= 947203200; $date += 86400)
      $dates_in_beteween[] = $date;
    

    $dates_in_between 将包含介于两者之间的“日期”列表。

    【讨论】:

      【解决方案2】:

      PHP 时间值只是 Unix 时间戳 - 自 1970 年 1 月 1 日以来的秒数。关闭 PHP 5 的日期时间对象:

      $start = strtotime('01 Jan 2000');
      $end = strtotime('07 Jan 2000');
      
      for ($d = $start; $d <= $end; $d += 86400) { // increment by 86,400 seconds, aka 1 day
          echo date('d/m/Y', $d);
      }
      

      有更好的方法,使用 DateTime / DateInterval 对象,但这只是为了展示基础知识。

      【讨论】:

        【解决方案3】:

        鉴于您的纪元以秒为单位,您始终可以将一天中找到的秒数添加到第一个纪元:

         946684800 + 86400 = 946771200 -> Sun, 02 Jan 2000 00:00:00 GMT
        

        继续这样下去,我解释得更好:

        947203200 - 946684800 = 518400 / 86400 = 6 (exactly 6 days)
        

        所以(伪代码):

        for(int i = 946684800; i<946684800 ;i+=86400){
            day = getDate(i);
        }
        

        【讨论】:

          【解决方案4】:
          $epoch1 = '946684800';
          $epoch2 = '947203200';
          $i = 0;
          while($time < $epoch2) {
              $time = mktime(0, 0, 0, date("m", $epoch1)  , date("d", $epoch1)+$i, date("Y",$epoch1));
              echo date('d/m/Y', $time)."<br>";
              $i++;
          }
          

          【讨论】:

            【解决方案5】:

            如果正确理解问题,您希望在 2 个时期内的每一天(2000-01-01 和 2000-01-07)..

            可以这样做:

            <?php
            $epoch1 = 946684800;
            $epoch2 = 947203200;
            $difference = $epoch1 - $epoch2;
            ..
            //count days
            $amountOfDays = round(($epoch2-$epoch1)/86400);
            
            //looping all days
            for($i=1; $i<=$amountOfDays; $i++) {
            echo date('d/m/Y', $epoch1+($i*86400);
            }
            ?>
            

            【讨论】:

              【解决方案6】:
              $start = strtotime('2011-06-01');
              $end = strtotime('2011-06-15');
              $date = $start;
              $anArray = array();
              
              while ($date <= $end) {
                  $date = strtotime("+1 DAY", $date);
                  $anArray[] = $date;
              }        
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-11-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-05-07
                相关资源
                最近更新 更多