<?php
function getDates(DateTime $date) {
$day = $date->format('d');
if ($day == 20) {
$nextMonth = clone $date;
$nextMonth->modify('-1 day');
$nextMonth->modify('+1 month');
return [
'start' => $date,
'end' => $nextMonth,
];
} else if ($day == 19) {
$lastMonth = clone $date;
$lastMonth->modify('+1 day');
$lastMonth->modify('-1 month');
return [
'start' => $lastMonth,
'end' => $date,
];
}
$start = new DateTime($date->format('Y-m-20 H:i:s'));
if ($day > 20) {
$start->modify('-1 month');
}
$end = clone $start;
$end->modify('+1 month');
$end->modify('-1 day');
return [
'start' => $start,
'end' => $end,
];
}
$date = new DateTime('2017-09-20');
var_dump(getDates($date));
$date = new DateTime('2017-09-19');
var_dump(getDates($date));
$date = new DateTime('2017-09-15');
var_dump(getDates($date));
$date = new DateTime('2017-08-23');
var_dump(getDates($date));
- Output for 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.31, 7.4.0 - 7.4.33, 8.0.0 - 8.0.12, 8.0.14 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
- array(2) {
["start"]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2017-09-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
["end"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-10-19 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
}
array(2) {
["start"]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2017-08-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
["end"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-09-19 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
}
array(2) {
["start"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-09-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
["end"]=>
object(DateTime)#3 (3) {
["date"]=>
string(26) "2017-10-19 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
}
array(2) {
["start"]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2017-07-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
["end"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-08-19 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
}
- Output for 7.3.32 - 7.3.33, 8.0.13
- array(2) {
["start"]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2017-09-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
["end"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-10-19 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
}
array(2) {
["start"]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2017-08-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
["end"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-09-19 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
}
array(2) {
["start"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-09-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
["end"]=>
object(DateTime)#3 (3) {
["date"]=>
string(26) "2017-10-19 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
}
array(2) {
["start"]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2017-07-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
["end"]=>
object(DateTime)#2 (3) {
["date"]=>
string(26) "2017-08-19 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
}
preferences:
247.12 ms | 404 KiB | 287 Q