Reputation: 2191
This is my code i loop threw a couple of dates in a while loop where i try to create a startdate variable three days earlier than looped date. This does not work. Please help me! :)
<?php
// Start date
$date = '2015-07-01';
// End date
$yesterday = '2015-08-13';
while (strtotime($date) <= strtotime($yesterday)) {
//the start date
$startdate = date(strtotime("-3 day", strtotime($date)));
//the end date
$enddate = $date;
echo $startdate . " - " . $enddate . "<br>";
$date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));
}
?>
Upvotes: 0
Views: 899
Reputation:
If you are trying to list dates between $startDate
and $endDate
, with 3 days interval each time:
$startDate = new Datetime('2015-07-01');
$endDate = new Datetime('2015-08-13');
$interval = new DateInterval('P3D');
while ($startDate->format('Y-m-d') < $endDate->format('Y-m-d')) {
echo $startDate->format('Y-m-d').'<br />';
$startDate->add($interval);
}
echo $endDate->format('Y-m-d').'<br />';
If you need to do it backwards, just use sub()
instead of add()
and invert $startDate
and $endDate
.
Upvotes: 0
Reputation: 14136
Try this:
$startDate = new DateTime('2015-07-01');
$currentDate = new DateTime('2015-08-13');
$dates = [];
while ($currentDate >= $startDate) {
$dates[] = clone $currentDate;
$currentDate->modify('-3 days');
}
print_r($dates);
It decrements the current date by three days while it is greater than or equal to the start date in a loop, clones each instance and creates a list going backwards.
This yields:
Array
(
[0] => DateTime Object
(
[date] => 2015-08-13 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[1] => DateTime Object
(
[date] => 2015-08-10 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[2] => DateTime Object
(
[date] => 2015-08-07 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[3] => DateTime Object
(
[date] => 2015-08-04 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[4] => DateTime Object
(
[date] => 2015-08-01 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[5] => DateTime Object
(
[date] => 2015-07-29 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[6] => DateTime Object
(
[date] => 2015-07-26 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[7] => DateTime Object
(
[date] => 2015-07-23 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[8] => DateTime Object
(
[date] => 2015-07-20 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[9] => DateTime Object
(
[date] => 2015-07-17 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[10] => DateTime Object
(
[date] => 2015-07-14 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[11] => DateTime Object
(
[date] => 2015-07-11 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[12] => DateTime Object
(
[date] => 2015-07-08 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[13] => DateTime Object
(
[date] => 2015-07-05 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
[14] => DateTime Object
(
[date] => 2015-07-02 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)
)
Hope this helps :)
Upvotes: 1
Reputation: 607
build a date with date() and mktime():
$date = '2015-07-01';
// fill $year,$month and $day with exploded values
list($year,$month,$day) = explode("-",$date);
// add 3 Days
echo date("Y-m-d",mktime(0,0,0,$month,$day+3,$year));
// 10 Days earlier
echo date("Y-m-d",mktime(0,0,0,$month,$day-10,$year));
// 2 Month earlier
echo date("Y-m-d",mktime(0,0,0,$month-2,$day,$year));
Upvotes: 0