tag:forum.selfhtml.org,2005:/selfLetzten Monatstag ermitteln – SELFHTML-Forum2013-03-04T12:34:09Zhttps://forum.selfhtml.org/self/2013/mar/4/letzten-monatstag-ermitteln/1573553#m1573553Norbert2013-03-04T10:14:41Z2013-03-04T10:14:41ZLetzten 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#m1573557Norbert2013-03-04T10:41:26Z2013-03-04T10:41:26ZLetzten 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#m1573554seth_not@home2013-03-04T11:52:51Z2013-03-04T11:52:51ZLetzten 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#m1573556seth_not@home2013-03-04T12:06:06Z2013-03-04T12:06:06ZLetzten 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#m1573555dedlfix2013-03-04T12:06:13Z2013-03-04T12:06:13ZLetzten 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#m1573558hottihttp://rolfrost.de2013-03-04T10:46:48Z2013-03-04T10:46:48ZLetzten 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#m1573561seth_not@home2013-03-04T12:01:16Z2013-03-04T12:01:16ZLetzten 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#m1573559Der Martinself@kennst.net2013-03-04T12:20:28Z2013-03-04T12:20:28ZLetzten 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#m1573560seth_not@home2013-03-04T12:34:09Z2013-03-04T12:34:09ZLetzten 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>