Anzahl der Tage des angegebenen Monats
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
angegebenen monats
beitrag
date
diverse kalenderfunktionen
eingabe
falsche ausgabe
format
funktion
jahr
jahreszahl
jahrhundert
kalender
kalenderfunktion
kriterium
monat
oktober
rangliste
schaltjahr
sen
startzeitpunkt
-
hallo,
mit date(t) kann ich ja die Anzahl der Tage des angegebenen Monats bestimmen
so w?rde er die von diesem monat nehmen.
wie kann ich es amchen das ich manuell per $m zb den moant eingebe, zb eben die 11 oder die 7?
per date(t, $m) gehts ne, is ja auch klar, da es kein timestamp ist.
MfG
Kraeusi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
mach es doch einfach so in etwa:
if($monat<8) { if($monat==2) { if($Jahr%4==0)print(29); else print(28); } else { if($monat%2==0)print(30); else print(31); } } else { if($monat%2==1)print(30); else print(31); }
M?sste eigentlich so stimmen... -
probier mal mit der in php integrierten funktion
$lday = 31; while(!checkdate($month, $lday, $year)) { $lday--; } echo "Der Monat $month hat $lday Tage";
Hinweis: bei mir funkt es immer nur, wenn der Monat ohne f?hrende NULL beginnt, also nicht 08, sondern 8, allerdings war das bisher nur bei der 8.
einfach mal probieren...
mfg -
Ich habe auch noch ein Script geschrieben!:
Einzusehen unter:
http://dussel.pyrokar.lima-city.de/php-scripte/tage_eines_monats.php
Der Code dazu:
$s = $_POST["s"]; $m1 = $_POST["m"]; $y = $_POST["y"]; $m = $m1 + 1; if ($s) { if (($m) AND ($y)) { $monat = mktime(0,0,0, $m, 0, $y); echo 'Der Angegebene Monat <b>'.date(F, $monat).'</b> im Jahr <b>'.date(Y, $monat).'</b> hat <b>'.date(t, $monat).'</b> Tage!'; } else { echo 'Geben Sie bitte einen Monat und ein Jahr ein!'; } } else { echo ' <form method="POST"> <p align="center">Monat: <input type="text" name="m" size="2"> <font size="2"> (im Format: '.date(m).')</font><br> Jahr: <input type="text" name="y" size="4"> <font size="2">(im Format: '.date(Y).')</font></p> <p align="center"><input type="submit" value="Ausrechnen" name="s"></p> </form> '; }
Beitrag ge?ndert am 31.10.2005 11:19 von dussel -
Ich w?rde es etwa so l?sen wie wie bladehunter; der code ist zwar etwas lange, aber es funktioniert bestimmt! Der Code von rangliste funktioniert nicht fehlerfrei und der Code von dussel liefert mir auch eine falsche Ausgabe.
@Dussel
Bei der Eingabe der Werte "monat=09 und Jahr=6000" bekomme ich folgende R?ckmeldung:
Der Angegebene Monat December im Jahr 1969 hat 31 Tage!
Da stimmt irgendwas nicht ganz...
sebigisler -
Mal hier kucken:
http://alopex.pyrokar.lima-city.de/index.php/PHP/Kalender.html
Dort habe ich diverse Kalenderfunktionen hingestellt. Am einfachsten w?re die Verwendung der PHP-Kalenderfunktionen, die aber auf Lima-Webspace leider nicht funktionieren.
Die Einzelfunktionen f?r die Berechnung der Tage eines Monates:
Die Tage eines Monats berechnen f?r die
Jahre 1 bis 9999:
Wichtig sind die Februartage, denn die h?ngen davon ab, ob ein Jahr ein Schaltjahr ist. Au?erdem muss der Oktober einzeln berechnet werden, denn der Oktober 1582 hatte nur 21 Tage (Kalenderumstellung). Das ist aber nicht ganz so wichtig (und stimmt auch nicht f?r alle Gegenden der Welt).
function days_in_month( $year, $month ) { if( !valid_year($year) ) return(FALSE); if( !valid_month($month) ) return(FALSE); // ein 30-Tage-Monat? if( $month == 4 or $month == 6 or $month == 9 or $month == 11 ) return 30; // Februar-Tage berechnen if($month == 2) { if( is_leap_year($year) ) return(29); else return(28); } // im Oktober 1582 wurden die Tage 5 bis 14 // gestrichen if( ($year == 1582) and ($month == 10) ) return 21; // einer der anderen Monate return 31; }
Berechnen, ob das Jahr ein Schaltjahr ist:
function is_leap_year( $year = FALSE ) { if( $year % 4 != 0 ) return(FALSE); // alle nicht durch 4 teilbaren Jahre (die // meisten); if( 1599 < $year ) { // 1600 war das erste Jahrhundert, dass nach der // neuen Regel ein Schaltjahr war if( $year % 400 == 0 ) return(TRUE); // alle Jahrhunderte, die durch 4 teilbar sind } if( $year % 100 == 0 ) return(FALSE); // alle anderen Jahrhunderte return(TRUE); // alle anderen durch 4 teilbaren Jahre }
Ist das Jahr im Bereich 1 bis 9999?
function valid_year( $year = FALSE, $min = 1, // sollte auf 1583 gesetzt werden, bei Funktionen, die noch nicht angepasst wurden $max = 9999 // kann m?glicherweise auch h?her gesetzt werden ... ) { if( $year === FALSE or $year < $min or $year > $max ) return(FALSE); return(TRUE); }
Ist die Monatszahl im Bereich 1 bis 12?
function valid_month( $month = FALSE ) { if( $month === FALSE or $month > 12 or $month < 1 ) return(FALSE); return(TRUE); }
Beitrag ge?ndert am 31.10.2005 12:52 von alopex -
ja, ich wei? auch nicht! ich habe es auch getestet bis 12 - 2037! Das geht noch alles normal!
Ab 01 - 2038! tritt dann immer die jahrzahl 1969 auf!
Ich werde es noch verbessern m?ssen! -
Die Funktion mktime() arbeitet intern mit einem UNIX-Timestamp. Das ist eine 32Bit-Zahl, die die Sekunden seit ca. 1969 (oder so ?hnlich) z?hlt. Und ab 2037 ist die Zahl zu gro?, um in eine 32Bit-Bin?rzahl zu passen. Daher "l?uft" sie ?ber und wird wieder von vorne begonnen. Deshalb muss man f?r solche gro?en Jahreszahlen entweder die PHP-Kalenderfunktionen benutzen,
http://de.php.net/manual/de/ref.calendar.php
oder eben selbst richtige Datumsfunktionen schreiben. Mit den "Zeit-"Funktionen von PHP geht das jedenfalls nicht.
MfG
alopex
Beitrag ge?ndert am 31.10.2005 13:30 von alopex -
falsch falsch falsch, ihr denkt viel zu komplieziert....
date("t", mktime( 0, 0, 0, $m, 1, $y)
wo $y das ajhr ist in der angabe 2005
und $m der monat mir 11 oder 7
ihr habt vielzuviel gedacht, as sind aldezeiten leute...
MfG
Kraeusi -
Denk doch mal an die Zukunft, Junge!
Ab 2037 funktioniert dein Ansatz nicht mehr, weil da der UNIX-Timestamp ?berl?uft! Und vor 1969 funktioniert mktime() auch nicht, weil es da noch keinen UNIX-Timestamp gab. F?r dein spezielles Problem mag die L?sung ja ausreichen. Aber f?r richtige Kalenderberechnungen ziehe ich eine funktionssicheren Algorithmus vor. Die Ladezeiten sind unerheblich -- was interessieren mich Milisekunden zum Startzeitpunkt?
MfG
alopex -
naja mich interresieren aber die laezeiten, du kensnt mich doch k?rbiskopf^^
nein, der kalender wird auch nur immer 20 jahre sp?ter gehen und in die vergangenheit wird er zwar gehen, aber da auch cniht so viel, also sind deine kriterien viel zu luftlos, da sie kein grund gegen meinen code sind, der nunmal wirklich eifnacher und somit besser ist wie die bisher vorgeschlagenen riesen codeschnippsel..
MfG
Kraeusi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage