Ich versuche herauszufinden, wie man insgesamt Monate zwischen zwei überlappenden Datumsbereichen erhält.PHP | Gesamtmonate von zwei überlappenden Datumsbereichen erhalten
e-g Datumsbereich von Datum-A bis Datum-B überlappt den Datumsbereich von Datum-X und Datum-Y.
_ Start|Jan - Feb - March - April ------ Nov - Dec|End (DateRange A) Start|Jan - Feb ---- Dec - Jan - Feb|End _
In zwei Datumsbereiche die Jan und Februar Monate kollidieren. Mittel von insgesamt 2 Monaten sind da. Also ich möchte diese zwei Monate in meinem Array, damit ich verschiedene Funktionen darauf anwenden kann.
e-g Ich habe diese beiden Daten
$dateRange1Start = "2015-07-01";
$dateRange1End = "2014-06-30";
=-=-=-=====-=-==
$dateRange2Start = "2012-02-01";
$dateRange2End = "2014-12-31";
Es gibt insgesamt 6 Monate zwischen diesen beiden Datumsbereiche zu kollidieren. Ich möchte diese 6 Monate bekommen.
Ich habe versucht, in Google nach Hilfe zu suchen, aber meistens bekomme ich weniger als oder mehr als Zeichen. aber genau so. Ich habe versucht, meine eigene Logik zu implementieren, aber seine mich nicht immer überall, leider nur mehr Probleme :(
Ich versuche, um Ergebnisse zu erhalten wie diese
$collidingDates = array("2014-07","2014-08","2014-09","2014-10","2014-11","2014-12");
Jede Hilfe würde geschätzt. :)
== - == - == - = - == - == - == - == - == - ==
UPDATE:
Hier ist was ich habe don Bis jetzt, ja, ich bekomme Code von hier und da. und es ein wenig nach oben zu drehen, um meine Anforderungen zu erfüllen.
//Getting all Months from First Date Range
$start = (new DateTime('2014-06-01'))->modify('first day of this month');
$end = (new DateTime('2015-05-06'))->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$firstPeriod = new DatePeriod($start, $interval, $end);
//Getting all Months from Second Date Range.
$start = (new DateTime('2012-02-01'))->modify('first day of this month');
$end = (new DateTime('2014-12-31'))->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$secondPeriod = new DatePeriod($start, $interval, $end);
$collidingDates = array();
foreach ($firstPeriod as $f_dt) {
foreach($secondPeriod as $s_dt){
if($f_dt->format("Y-m") === $s_dt->format("Y-m")){
array_push($collidingDates,$f_dt->format("Y-m"));
}
}
}
echo "<pre>";
print_r($collidingDates);
ich habe diese Ausgabe.
Array
(
[0] => 2014-06
[1] => 2014-07
[2] => 2014-08
[3] => 2014-09
[4] => 2014-10
[5] => 2014-11
[6] => 2014-12
)
Aber ich glaube, ich bin immer 1 Extra Monat 2014-06, nicht sicher, wie O_o ??
Haben Sie versucht, Ihre Zeiten zu DateTime-Objekten zu konvertieren und -> diff() zu verwenden? – Doug
nein, weil ich nicht sicher bin, wie man Monate zwischen zwei Datumsbereichen bekommt. Ich habe Unterschiede von zwei Daten, aber nicht von zwei Datumsbereichen genommen. –