获取PHP DatePeriod对象的开始和结束日期?

时间:2012-05-30 14:21:07

标签: datetime date php

如何获取DatePeriod对象的开始和结束日期?

$today  = new \DateTime(date('Y-m-d')); // 2012-05-30
$period = new \DatePeriod($today, new \DateInterval('P1M'), 1);

$stats = new UsageStatistics($period);

class UsageStatistics
{

    protected $period, $sentEmailCount, $autoSentEmailCount;

    public function __construct(\DatePeriod $period)
    {
        $this->period = $period;

        // Current logged in user and email repository
        $user = $this->getUser();
        $repo = $this->getEmailRepository();

        // Get the start and end date for the given period
        $startDate = ...
        $endDate   = ...

        $result = $repo->getAllSentCount($user, $startDate, $endDate);

        // Assigning object properties
    }

    public function getSentEmailCount() { return $this->sentEmailCount; }

    public function getAutoSentEmailCount() { return $this->autoSentEmailCount; }
}

4 个答案:

答案 0 :(得分:5)

DatePeriod仅实现Traversable接口,并且没有其他方法可以访问元素或检索它们。

您可以轻松完成开始/结束日期:

$periodArray = iterator_to_array($period);
$startDate = reset($periodArray);
$endDate = end($periodArray);

答案 1 :(得分:0)

@hakre和@Boby发布的解决方案不正确。

$endDatePERIOD % INTERVAL = 0

期间的结束时间

所有其他案例$endDate将为END - PERIOD

答案 2 :(得分:0)

我使用的是PHP 5.6.9,您似乎可以使用属性intend来访问您的开始和结束start对象:

DateTime

PHP文档似乎并未反映出这一点。我做了$p = new DatePeriod($s, $i, $e); $startTime = $p->start; //returns $s $endTime = $p->end; //returns $e 的DatePeriod对象,得到了以下输出:

print_r

似乎属性DatePeriod Object ( [start] => DateTime Object ( [date] => 2015-06-01 00:00:00.000000 [timezone_type] => 3 [timezone] => America/Los_Angeles ) [current] => DateTime Object ( [date] => 2015-06-08 00:00:00.000000 [timezone_type] => 3 [timezone] => America/Los_Angeles ) [end] => DateTime Object ( [date] => 2015-06-08 00:00:00.000000 [timezone_type] => 3 [timezone] => America/Los_Angeles ) [interval] => DateInterval Object ( [y] => 0 [m] => 0 [d] => 7 [h] => 0 [i] => 0 [s] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) [recurrences] => 1 [include_start_date] => 1 ) current也可见。

答案 3 :(得分:0)

$startingDate = new DateTime($startingDay);
$startingDate->modify('previous day');
$startingDate->modify('next Sunday');
     
$endingDate   = new DateTime($endingDay);
$endingDate->modify('next day');
   
$period = new DatePeriod($startingDate, new DateInterval('P1W'), $endingDate);