Themabewertung:
- 0 Bewertung(en) - 0 im Durchschnitt
- 1
- 2
- 3
- 4
- 5
Coding: Wie ein Jahr clever bestimmen?
|
Dirk
Software Archäologe
Beiträge: 14.936
Registriert seit: Jul 2008
|
Coding: Wie ein Jahr clever bestimmen?
Habe gerade nen kleinen bug bei meiner jahresberechnung in php entdeckt.
gesucht wird einfach datum A nach datum B die Jahre.
Weil ja Jahr A - B nicht so einfach funktioniert, dachte ich nehme ich Tage des Jahres , aber da kackt ja das Schaltjahr dazwischen. wer hat sich ausgedacht das sylvester am 31.12 und nicht am 28/29.2 ist. selbst der französische rev kalender war da weiter....
egal gibt es eine clevere methode als zu checken, ob der aktuelle monat kleiner oder größer ist, und dann auch noch im falle, das er gleich ist, auch noch den tag zu checken?
Die Tage zwischen den Jahren sind ja kein Problem, aber da die Schaltjahre aufzusummieren....
Hat die welt da was????
|
|
02.04.2009 21:31 |
|
gandro
Quälgeist
Beiträge: 8.950
Registriert seit: Jul 2008
|
Coding: Wie ein Jahr clever bestimmen?
Ehm. Unix-Zeitstempel?
Nachtrag: Oder habe ich das Problem falsch verstanden?
(Dieser Beitrag wurde zuletzt bearbeitet: 02.04.2009 21:39 von gandro.)
|
|
02.04.2009 21:33 |
|
friedrichheinze
...und Kondensatoren.
Beiträge: 2.838
Registriert seit: Jul 2008
|
|
02.04.2009 22:09 |
|
s4ndwichMakeR
Realitätsfeinmotoriker
Beiträge: 5.195
Registriert seit: Jul 2008
|
Coding: Wie ein Jahr clever bestimmen?
Ich empfehle ebenfalls die Verwendung von Zeitstempeln.
Übrigens waren es die Römer, die 153 v. Chr. den Jahresbeginn von März auf Januar verlagerten. Daher verschoben sich die Monate um zwei Stellen, was dazu führte, dass der Septemper nicht mehr logischerweise der siebte (lat. septem) Monat war, sondern der neunte. Dasselbe gilt für Oktober (octo), November (novem) und Dezember (decem). Ursprünglich hatte der römische Kalender nur zehn Monate. Die Monate Januar und Februar wurden erst in Folge von Schaltjahrs- oder besser Schaltmonatsregelungen ca. 700 v. Chr. am Ende eines jeden Jahres eingeführt.
Erst 1691 legte schließlich Papst Innozenz XII. den ersten Januartag als Neujahrstag fest und löste damit den 6. Januar als bis dahin meistverbreiteten Neujahrstag ab. Der Februar blieb weiterhin der Monat, an dem zu Ausgleichungszwecken rumgeschraubt wurde.
• • • – • – – • – –
|
|
03.04.2009 00:36 |
|
Dirk
Software Archäologe
Beiträge: 14.936
Registriert seit: Jul 2008
|
Coding: Wie ein Jahr clever bestimmen?
das problem ist wie erkenne ich das der 1.märz 67 genau ein jahr später als der 1.märz 68 ist. die differenz von 365 tagen bringt mich nicht weiter, da 1968 rein zufällig ein schaltjahr war...
über die zeitstempel bekomme ich ja die differenzwerte seit 1970 oder so. ziehe ich da wieder die differenz hab ich das zeit delta. das ohne problem in stunden, tage, wochen und sonst was umgerechnet werden kann.
aber nicht in monaten und jahren. weil die ja unterschiedlich lang sind.
daher suche ich nen algorithmus der auf diesem zeitdelta basiert. weil sonst würde ich ne if schachtelung machen und die reinen Zahlen für Monat/Tag/Jahr vergleciehn.
Effizient kann das aber glaub ich mit dem zeitdelta nur sein, wenn es ne schaltjahresmethode schon gibt. und selbst dann wäre es ne doofe schleife.
|
|
03.04.2009 08:15 |
|
klemmi
Erfahrener Benutzer
Beiträge: 901
Registriert seit: Jul 2008
|
Coding: Wie ein Jahr clever bestimmen?
hab da mal was geschireben in nem Praktikum - das zu zuälligen Schaltjahren...
Code:
private static boolean istSchaltjahr(int jahr)
{
boolean aus;
if (jahr % 100 == 0)
{
aus = (jahr % 400 == 0);
}
else
{
aus = (jahr % 4 == 0);
}
return aus;
}
|
|
03.04.2009 09:27 |
|
Dirk
Software Archäologe
Beiträge: 14.936
Registriert seit: Jul 2008
|
Coding: Wie ein Jahr clever bestimmen?
habs jetzt ohne schaltjahre gemacht:
Code:
echo ". Das ist ";
if ($wtime["mon"] < $atime["mon"]){
echo (($atime["year"]-$wtime["year"]));
} else{
if (($atime["mon"]==$wtime["mon"])&&($atime["mday"]>=$wtime["mday"])){
echo ($atime["year"]-$wtime["year"]);
}
else{
echo (($atime["year"]-$wtime["year"])-1);
}
}
echo " Jahre her.";
atime ist das aktuelle datum, per getDate, wtime das geburtsjahr einer sache
|
|
03.04.2009 10:43 |
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste