tag:forum.selfhtml.org,2005:/self Letzten Monatstag ermitteln – SELFHTML-Forum 2013-03-04T12:34:09Z https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573553#m1573553 Norbert 2013-03-04T10:14:41Z 2013-03-04T10:14:41Z Letzten Monatstag ermitteln <p>Moinsen!</p> <p>Ich ermittle so den letzten Tag eines Monats (eine Korrektur für den Dezember habe ich der Übersicht halber weggelassen):</p> <p>use Time::Local;<br>   $jahr=2013;<br>   $monat=3; #Januar=1, Februar=2, ...<br>   $tagessekunden=24*60*60;<br>   ($sek,$min,$std,$monatstag,$tempmonat,$tempjahr,$wochentag,$jahrestag,$sommerzeit)=localtime(timelocal(0,0,0,1,$monat,$jahr)-$tagessekunden);<br>   print $monatstag;</p> <p>Also</p> <ul> <li>Den 1. Tag des Folgemonats, 00:00:00 Uhr an timelocal übergeben (Januar entspricht 0, für den Folgemonat muss also 1 übergeben werden)</li> <li>Vom ermittelten Timestamp 1 Tag (24*60*60 Sekunden) abziehen</li> <li>Ergebnis in Datum/Uhrzeit umwandeln, daraus den Monatstag verwenden</li> </ul> <p>Das Ganze scheint wunderbar zu funktionieren - nur für März 2013 nicht. Der hat angeblich nur 30 Tage.</p> <p>Wo liegt mein Fehler?</p> <p>Viele Grüße,<br> Norbert</p> https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573557#m1573557 Norbert 2013-03-04T10:41:26Z 2013-03-04T10:41:26Z Letzten Monatstag ermitteln <p>Liebe Leute,</p> <p>ich habe meinen Fehler gefunden: Der 31.3. ist in diesem Jahr der letzte Sonntag im März und deshalb wegen der Umstellung auf die Sommerzeit nur 23 Stunden lang. Diesen Sonderfall hatte ich nicht berücksichtigt.</p> <p>Wenn sich schon jemand Gedanken gemacht hat: Besten Dank dafür!</p> <p>Viele Grüße,<br> Norbert</p> <blockquote> <p>Moinsen!</p> <p>Ich ermittle so den letzten Tag eines Monats (eine Korrektur für den Dezember habe ich der Übersicht halber weggelassen):</p> <p>use Time::Local;<br>   $jahr=2013;<br>   $monat=3; #Januar=1, Februar=2, ...<br>   $tagessekunden=24*60*60;<br>   ($sek,$min,$std,$monatstag,$tempmonat,$tempjahr,$wochentag,$jahrestag,$sommerzeit)=localtime(timelocal(0,0,0,1,$monat,$jahr)-$tagessekunden);<br>   print $monatstag;</p> <p>Also</p> <ul> <li>Den 1. Tag des Folgemonats, 00:00:00 Uhr an timelocal übergeben (Januar entspricht 0, für den Folgemonat muss also 1 übergeben werden)</li> <li>Vom ermittelten Timestamp 1 Tag (24*60*60 Sekunden) abziehen</li> <li>Ergebnis in Datum/Uhrzeit umwandeln, daraus den Monatstag verwenden</li> </ul> <p>Das Ganze scheint wunderbar zu funktionieren - nur für März 2013 nicht. Der hat angeblich nur 30 Tage.</p> <p>Wo liegt mein Fehler?</p> <p>Viele Grüße,<br> Norbert</p> </blockquote> https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573554#m1573554 seth_not@home 2013-03-04T11:52:51Z 2013-03-04T11:52:51Z Letzten Monatstag ermitteln <p>gudn tach!</p> <blockquote> <p>Ich ermittle so den letzten Tag eines Monats[...]:</p> <p>use Time::Local;<br>   $jahr=2013;<br>   $monat=3; #Januar=1, Februar=2, ...<br>   $tagessekunden=24*60*60; [...]</p> </blockquote> <p>da gibt's besseres:</p> <pre><code class="block language-perl"><span class="token comment">#!/usr/bin/perl </span> <span class="token keyword">use</span> strict<span class="token punctuation">;</span> <span class="token keyword">use</span> warnings<span class="token punctuation">;</span> <span class="token keyword">use</span> DateTime<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$date</span> <span class="token operator">=</span> DateTime<span class="token operator">-></span>new<span class="token punctuation">(</span> year <span class="token operator">=></span> <span class="token number">2013</span><span class="token punctuation">,</span> month <span class="token operator">=></span> <span class="token number">3</span><span class="token punctuation">,</span> day <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$date</span><span class="token operator">-></span>add<span class="token punctuation">(</span><span class="token string">'months'</span><span class="token operator">=></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">-></span>subtract<span class="token punctuation">(</span><span class="token string">'days'</span><span class="token operator">=></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">print</span> <span class="token variable">$date</span><span class="token operator">-></span>day<span class="token punctuation">,</span><span class="token string">"\n"</span><span class="token punctuation">;</span> </code></pre> <p>prost<br> seth</p> https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573556#m1573556 seth_not@home 2013-03-04T12:06:06Z 2013-03-04T12:06:06Z Letzten Monatstag ermitteln <p>gudn tach!</p> <blockquote> <p>da gibt's besseres: [...]</p> </blockquote> <p>aeh, und das geht sogar noch praegnanter und einfacher:</p> <pre><code class="block language-perl"><span class="token comment">#!/usr/bin/perl </span> <span class="token keyword">use</span> strict<span class="token punctuation">;</span> <span class="token keyword">use</span> warnings<span class="token punctuation">;</span> <span class="token keyword">use</span> DateTime<span class="token punctuation">;</span> <span class="token keyword">print</span> DateTime<span class="token operator">-></span>last_day_of_month<span class="token punctuation">(</span> year <span class="token operator">=></span> <span class="token number">2013</span><span class="token punctuation">,</span> month <span class="token operator">=></span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token punctuation">)</span><span class="token operator">-></span>day<span class="token punctuation">,</span><span class="token string">"\n"</span><span class="token punctuation">;</span> </code></pre> <p>prost<br> seth</p> https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573555#m1573555 dedlfix 2013-03-04T12:06:13Z 2013-03-04T12:06:13Z Letzten Monatstag ermitteln <p>Tach!</p> <blockquote> <p>$date->add('months'=>1)->subtract('days'=>1);</p> </blockquote> <p>Gibt es in Perl nichts, das die Anzahl der Tage eines Monats ermitteln kann? Würde mich sehr wundern. Auch das Fehlen des Äquivalents zu PHPs strtotime('last day of 2013-03-04'), würde ich nicht erwarten, zumal das ja auch nur ein Durchreicher an C's asctime() ist.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573558#m1573558 hotti http://rolfrost.de 2013-03-04T10:46:48Z 2013-03-04T10:46:48Z Letzten Monatstag ermitteln <p>hi,</p> <blockquote> <p>ich habe meinen Fehler gefunden: Der 31.3. ist in diesem Jahr der letzte Sonntag im März und deshalb wegen der Umstellung auf die Sommerzeit nur 23 Stunden lang. Diesen Sonderfall hatte ich nicht berücksichtigt.</p> </blockquote> <p>Solche Sonderfälle hast Du immer an der Backe, wenn Du Datumsberechnungen über die Sekunden machst.<br> Tipp: Rechne mit ganzen Tagen, nutze Date::Calc von Steffen Beyer.</p> <p>Hotti</p> https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573561#m1573561 seth_not@home 2013-03-04T12:01:16Z 2013-03-04T12:01:16Z Letzten Monatstag ermitteln <p>gudn tach!</p> <blockquote> <p>Tipp: Rechne mit ganzen Tagen, nutze Date::Calc von Steffen Beyer.</p> </blockquote> <p>stimmt, das waere hier wohl am einfachsten umzusetzen (da logischerweise die anzahl der tage eines monats gleich dem letzten tag desselben monats ist):</p> <pre><code class="block language-perl"><span class="token comment">#!/usr/bin/perl </span> <span class="token keyword">use</span> strict<span class="token punctuation">;</span> <span class="token keyword">use</span> warnings<span class="token punctuation">;</span> <span class="token keyword">use</span> Date<span class="token punctuation">:</span><span class="token punctuation">:</span>Calc <span class="token string">qw(Days_in_Month)</span><span class="token punctuation">;</span> <span class="token keyword">print</span> Days_in_Month<span class="token punctuation">(</span><span class="token number">2013</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token string">"\n"</span><span class="token punctuation">;</span> </code></pre> <p>prost<br> seth</p> https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573559#m1573559 Der Martin self@kennst.net 2013-03-04T12:20:28Z 2013-03-04T12:20:28Z Letzten Monatstag ermitteln <p>Hallo,</p> <blockquote> <blockquote> <p>ich habe meinen Fehler gefunden: Der 31.3. ist in diesem Jahr der letzte Sonntag im März und deshalb wegen der Umstellung auf die Sommerzeit nur 23 Stunden lang. Diesen Sonderfall hatte ich nicht berücksichtigt.<br> Solche Sonderfälle hast Du immer an der Backe, wenn Du Datumsberechnungen über die Sekunden machst.</p> </blockquote> </blockquote> <p>nicht notwendigerweise: Wenn man schön in UTC bleibt, passt alles.</p> <p>Ciao,<br>  Martin</p> <div class="signature">-- <br> Ich habe gerade erfahren, dass Tante Frieda gestorben ist. Der Tod hat sie im Schlaf ereilt. - Schrecklich. Dann weiß sie es also noch gar nicht?<br> Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:( </div> https://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573560#m1573560 seth_not@home 2013-03-04T12:34:09Z 2013-03-04T12:34:09Z Letzten Monatstag ermitteln <p>gudn tach!</p> <blockquote> <blockquote> <p>Solche Sonderfälle hast Du immer an der Backe, wenn Du Datumsberechnungen über die Sekunden machst.</p> </blockquote> <p>nicht notwendigerweise: Wenn man schön in UTC bleibt, passt alles.</p> </blockquote> <p>allgemein koennen einem dann aber z.b. bei datumsberechnung schaltjahre noch probleme bereiten. heutzutage sollte man solche berechnungen in der regel von fertigen, getesteten modulen erledigen lassen und nicht raeder neu-erfinden.</p> <p>prost<br> seth</p>