<?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,
];
} elseif ($day > 20) {
$start = new DateTime($date->format('Y-m-20 H:i:s'));
} else {
$start = new DateTime($date->format('Y-m-20 H:i:s'));
$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 7.0.0 - 7.0.23, 7.1.0 - 7.1.20, 7.2.6 - 7.2.33, 7.3.16 - 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.29, 8.2.0 - 8.2.23, 8.3.0 - 8.3.11
- 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-08-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "Europe/Amsterdam"
}
["end"]=>
object(DateTime)#3 (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)#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"
}
}
- 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-08-20 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
["end"]=>
object(DateTime)#3 (3) {
["date"]=>
string(26) "2017-09-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"
}
}
preferences:
76.61 ms | 412 KiB | 5 Q