php: Alle "Jahre-Monate" von Startdatum bis Enddatum aufzählen – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self php: Alle "Jahre-Monate" von Startdatum bis Enddatum aufzählen Sat, 25 Dec 21 10:36:01 Z https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794790#m1794790 https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794790#m1794790 <p>Frohe Weihnachten Euch allen,</p> <p>ich möchte, ausgehend von einem Startzeitpunkt YYYY-mm bis zu einem Endzeitpunkt YYYY-mm alle Jahr-Monat Kombinationen aufzählen.</p> <p>Gibt es da eine php-Funktion, die mir dabei hilft?</p> <p>Jörg</p> php: Alle "Jahre-Monate" von Startdatum bis Enddatum aufzählen Sat, 25 Dec 21 10:44:23 Z https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794791#m1794791 https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794791#m1794791 <p>@@Jörg</p> <blockquote> <p>ich möchte, ausgehend von einem Startzeitpunkt YYYY-mm bis zu einem Endzeitpunkt YYYY-mm alle Jahr-Monat Kombinationen aufzählen.</p> <p>Gibt es da eine php-Funktion, die mir dabei hilft?</p> </blockquote> <p>Ja: <a href="https://www.php.net/manual/de/ref.datetime.php" rel="nofollow noopener noreferrer">Datumfuntionen</a> und <a href="https://www.php.net/manual/de/language.control-structures.php" rel="nofollow noopener noreferrer">Schleifen</a>.</p> <p> LLAP</p> <div class="signature">-- <br> <em>„Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“</em><br> — Joachim Gauck über Impfgegner </div> php: Alle "Jahre-Monate" von Startdatum bis Enddatum aufzählen Sat, 25 Dec 21 10:51:36 Z https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794792#m1794792 https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794792#m1794792 <p>Ziemlich ärgerlich <br> Ich hatte soeben mein Posting um einen Lösungsvorschlag editiert. Leider hat das so lange gedauert, dass ich darüber das Zugriffsrecht verlor. Das alleine ist nicht schlimm, aber das dabei mein kompletter Edit-Text verloren geht, ist ärgerlich!</p> <p>Hier also nochmal, als Pseudocode:</p> <pre><code class="block">i=0; while (strtotime(Starjahr-Startmonat) <= strtotime(Zieljahr-Zielmonat)) { echo Startzeitpunkt + i Monate; i++; } </code></pre> <p>Hierbei, wenns keine sinnvollere Lösung gibt, wüßte ich aber nicht genau, wie ich "Startzeitpunkt + i Monate" aufdröseln muß.</p> <p>Jörg</p> php: Alle "Jahre-Monate" von Startdatum bis Enddatum aufzählen Sat, 25 Dec 21 13:00:56 Z https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794795#m1794795 https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794795#m1794795 <p>Dein Problem ist wohl die Fallunterscheidung.</p> <p>Gehe die Jahre durch. Wenn das Jahr das erste Jahr durchgezählt wird beginne mit dem Startmonat, sonst 1; Wenn das Jahr das letzte Jahr durchgezählt wird ende mit dem Endmonatmonat, sonst 12;</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$firstDate</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"25.12.2021"</span><span class="token punctuation">;</span> <span class="token variable">$lastDate</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"25.11.2023"</span><span class="token punctuation">;</span> <span class="token variable">$firstDate</span> <span class="token operator">=</span> <span class="token function">strtotime</span><span class="token punctuation">(</span> <span class="token variable">$firstDate</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$lastDate</span> <span class="token operator">=</span> <span class="token function">strtotime</span><span class="token punctuation">(</span> <span class="token variable">$lastDate</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$firstYear</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y'</span><span class="token punctuation">,</span> <span class="token variable">$firstDate</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$firstMonth</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'n'</span><span class="token punctuation">,</span> <span class="token variable">$firstDate</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$lastYear</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y'</span><span class="token punctuation">,</span> <span class="token variable">$lastDate</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$lastMonth</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'n'</span><span class="token punctuation">,</span> <span class="token variable">$lastDate</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token variable">$Y</span> <span class="token operator">=</span> <span class="token variable">$firstYear</span><span class="token punctuation">;</span> <span class="token variable">$Y</span> <span class="token operator"><=</span> <span class="token variable">$lastYear</span><span class="token punctuation">;</span> <span class="token variable">$Y</span><span class="token operator">++</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$SM</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token variable">$LM</span><span class="token operator">=</span><span class="token number">12</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$Y</span> <span class="token operator">==</span> <span class="token variable">$firstYear</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$SM</span> <span class="token operator">=</span> <span class="token variable">$firstMonth</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$Y</span> <span class="token operator">==</span> <span class="token variable">$lastYear</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$LM</span> <span class="token operator">=</span> <span class="token variable">$lastMonth</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">for</span> <span class="token punctuation">(</span> <span class="token variable">$M</span> <span class="token operator">=</span> <span class="token variable">$SM</span><span class="token punctuation">;</span> <span class="token variable">$M</span> <span class="token operator"><=</span> <span class="token variable">$LM</span><span class="token punctuation">;</span> <span class="token variable">$M</span><span class="token operator">++</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"<span class="token interpolation"><span class="token variable">$Y</span></span>, <span class="token interpolation"><span class="token variable">$M</span></span>\n"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></code></pre> <p>Ausgabe:</p> <pre><code class="block">2021, 12 2022, 1 2022, 2 2022, 3 2022, 4 2022, 5 2022, 6 2022, 7 2022, 8 2022, 9 2022, 10 2022, 11 2022, 12 2023, 1 2023, 2 2023, 3 2023, 4 2023, 5 2023, 6 2023, 7 2023, 8 2023, 9 2023, 10 2023, 11 </code></pre> <p>Feinheiten, wie den Test, ob Startdatum und Enddatum a) erkannt werden und b) sich in der richtigen Weise unterscheiden, musst Du selbst nachrüsten.</p> php: Alle "Jahre-Monate" von Startdatum bis Enddatum aufzählen Sat, 25 Dec 21 17:06:39 Z https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794796#m1794796 https://forum.selfhtml.org/self/2021/dec/25/php-alle-monate-jahre-von-startdatum-bis-enddatum-aufzahlen/1794796#m1794796 <p>Hallo Raketenskripter,</p> <p>vielen lieben Dank für deine Hilfe </p> <p>Aber ich dachte an etwas einfacheres, sowas zum Beispiel:</p> <pre><code class="block language-php"><span class="token variable">$firstDate</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"2021-12"</span><span class="token punctuation">;</span> <span class="token variable">$lastDate</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"2023-11"</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">strtotime</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"<span class="token interpolation"><span class="token variable">$firstDate</span></span> + <span class="token interpolation"><span class="token variable">$i</span></span> month"</span><span class="token punctuation">)</span> <span class="token operator"><=</span> <span class="token function">strtotime</span><span class="token punctuation">(</span><span class="token variable">$lastDate</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m'</span><span class="token punctuation">,</span><span class="token function">strtotime</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"<span class="token interpolation"><span class="token variable">$firstDate</span></span> + <span class="token interpolation"><span class="token variable">$i</span></span> month"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string double-quoted-string">"\n"</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Ausgabe:</p> <pre><code class="block">2021-12 2022-01 2022-02 2022-03 2022-04 2022-05 2022-06 2022-07 2022-08 2022-09 2022-10 2022-11 2022-12 2023-01 2023-02 2023-03 2023-04 2023-05 2023-06 2023-07 2023-08 2023-09 2023-10 2023-11 </code></pre> <p>Grüße, Jörg</p>