I found two things useful to know that aren't covered here.
1. endDate is excluded:
<?php
$i = new DateInterval('P1D');
$d1 = new Datetime();
$d2 = clone $d1; $d2->add($i);
foreach(new DatePeriod($d1, $i, $d2) as $d) {
echo $d->format('Y-m-d H:i:s') . "\n";
}
?>
Will output:
2010-11-03 12:39:53
(Another one because I got it wrong at first)
2. For the first form, recurrences really means REcurrences, not occurences.
<?php
$i = new DateInterval('P1D');
$d = new Datetime();
foreach(new DatePeriod($d, $i, 1) as $d) {
echo $d->format('Y-m-d H:i:s') . "\n";
}
?>
Will output:
2010-11-03 12:41:05
2010-11-04 12:41:05
DatePeriod::__construct
(PHP 5 >= 5.3.0)
DatePeriod::__construct — Crea un nuevo objeto DatePeriod
Descripción
public DatePeriod::__construct()
( DateTime
$start
, DateInterval $interval
, int $recurrences
[, int $options
] )
public DatePeriod::__construct()
( DateTime
$start
, DateInterval $interval
, DateTime $end
[, int $options
] )
public DatePeriod::__construct()
( string
$isostr
[, int $options
] )Crea un nuevo objeto DatePeriod.
Parámetros
-
start -
La fecha de inicio del periodo.
-
interval -
El intervalo entre repeticiones dentro del periodo.
-
recurrences -
El número de repeticiones.
-
end -
La fecha final del periodo.
-
isostr -
Una especificación ISO 8601 del intervalo de repetición.
-
options -
Se puede establecer a
DatePeriod::EXCLUDE_START_DATEpara excluir la fecha de inicio del conjunto de fechas de repetición dentro del periodo.
Ejemplos
Ejemplo #1 Ejemplo de DatePeriod
<?php
$inicio = new DateTime('2012-07-01');
$intervalo = new DateInterval('P7D');
$fin = new DateTime('2012-07-31');
$repeticiones = 4;
$iso = 'R4/2012-07-01T00:00:00Z/P7D';
// Todos estos periodos son equivalentes.
$periodo = new DatePeriod($inicio, $intervalo, $repeticiones);
$periodo = new DatePeriod($inicio, $intervalo, $fin);
$periodo = new DatePeriod($iso);
// Iterando sobre el objeto DatePeriod, se imprimen todas
// las fechas de repetición dentro del periodo.
foreach ($periodo as $fecha) {
echo $fecha->format('Y-m-d')."\n";
}
?>
El resultado del ejemplo sería:
2012-07-01 2012-07-08 2012-07-15 2012-07-22 2012-07-29
Ejemplo #2 Ejemplo de DatePeriod con DatePeriod::EXCLUDE_START_DATE
<?php
$inicio = new DateTime('2012-07-01');
$intervalo = new DateInterval('P7D');
$fin = new DateTime('2012-07-31');
$periodo = new DatePeriod($inicio, $intervalo, $fin,
DatePeriod::EXCLUDE_START_DATE);
// Iterando sobre el objeto DatePeriod, se imprimen todas
// las fechas de repetición dentro del periodo.
// Observe que, en este caso, 2012-07-01 no se imprime.
foreach ($periodo as $fecha) {
echo $fecha->format('Y-m-d')."\n";
}
?>
El resultado del ejemplo sería:
2012-07-08 2012-07-15 2012-07-22 2012-07-29
simon dot kohlmeyer at mayflower dot de ¶
2 years ago
lars at hp-designs dot com ¶
9 months ago
When you add the time 23:59:59 to the end DateTime object something like the following then the end date will be included in the period:
<?php
$date_start = new DateTime('2012-03-12');
$date_end = new DateTime('2012-03-22 23:59:59');
$interval = '+2 days';
$date_interval = DateInterval::createFromDateString($interval);
$period = new DatePeriod($date_start, $date_interval, $date_end, DatePeriod::EXCLUDE_START_DATE);
foreach($period as $dt) {
echo $dt->format('d/m');
}
?>
OUTPUT:
14/03
16/03
18/03
20/03
22/03
