php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.09.2006, 21:23  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard Zeitberechnung im Schaltjahr

Moin,

jetzt mal frei von time()

Wie funktioniert eine Schaltjahrrechnung ?
Wenn ich im Schaltjahr bin habe ich ja 366 Tage, ab 365 wird aber
ins nächste Jahr gerechnet, d.h. der 366 Tag meines Schaltjahres
ist der 1.1. des nächsten, wie kann man das verhindern wenn man
nur einen Timestamp in sekunden hat ?

Problem: Daten vor 1970
__________________
keine
cytrobic ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.09.2006, 21:46  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Schaltjahr ist wenn das Jahr ohne Rest durch 4 teilbar ist aber nicht wenn es durch 100 teilbar ist es sei denn es ist durch 400 teilbar.

oder einfach
date("L")
DiBo33 ist offline  
Alt 13.09.2006, 22:36  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

jo ich weiss:

if($jahr % 4 == 0)
(modulo)

aber das problem ist ein anderes, nicht wie ich das feststellen kann
sondern wie ich es umgehen kann ...
__________________
keine
cytrobic ist offline  
Alt 13.09.2006, 22:40  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Verstehe ich jetzt nicht, was meinst du konkret mit umgehen?
Du hast pro Jahr 365 Tage ausser im SJ hast du 366.
DiBo33 ist offline  
Alt 14.09.2006, 08:40  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

genau.

ich habe einen timestamp der nicht von time() kommt
den will ich auswerten, darin enthalten sind die sekunden die seit einem bestimmten datum vergangen sind. Wenn ich da jetzt die Jahre rausrechne mache ich:

$jahre = floor($stamp / (365.25 * 24 * 60 * 60));

dann habe ich aber wenn der Stamp das Datum 31.12.2000 darstellt mit dieser Rechnung das Jahr 2001 ermittelt. Das habe ich umgangen indem ich ein Byte mitschicke der schon bein encoding des stamps festhält ob das datum ein SJ ist
oder nicht. Dann kann ich später wenn das Bit gesetzt ist vom Jahr eins abziehen
und bei den Tagen 365 Tage auf addieren, nur leider springt der bei meiner tages
berechnung dann ab dem 365 Tag wieder auf den 1.1. .. so das ich dann als Datum
den 1.1.2000 habe und nicht 31.12.2000 ...
__________________
keine
cytrobic ist offline  
Alt 14.09.2006, 10:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Du willst ausrechnen wieviel konkrete Jahre seit dem vergangen sind?

Bastel dir halt eine Funktion die genau arbeitet, also bei jedem hinzugefügten Jahr auch überprüft, ob ein Schaltjahr-Tag hinzugefügt werden muss.

Wenn du eine grobe Funktion benutzt
Code:
$jahre = floor($stamp / (365.25 * 24 * 60 * 60));
musst du dich über grobe Ergebnisse ja auch nicht wundern..
Zergling-new ist offline  
Alt 14.09.2006, 11:41  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

generiert wirds so:

PHP-Code:
<?php
  $time
[0] = 2000;  // Jahr
  
$time[1] = 365;    // Jahrestag
  
$time[2] = 12;      // Stunde
  
$time[3] = 23;      // Minute
  
$time[4] = 16;      // Sekunde
  
$time[0] = 0;        // Stampspeicherplatz

  
$sj floor($time[0] / 4);  // Schaltjahre
  
$nj $time[0] - $sj;        // keine Schaltjahre

  // Jahre und Schaltjahre in sek
  
$time[0] = $sj 366 24 60 60 $nj 365 24 60 60;  

  
// Jahrestage in sek
  
$time[1] = $time[1] * 24 60 60;
  
  
// Jahressek / Tagessek / Stundensek / Minutensek / Sekundensek zusammen
  
$time[5] = $time[0] + $time[1] + $time[2] * 3600 $time[3] * 60 $time[4];
?>
Der bei dem zerpfücken mit 365.25 runtergerundete wert entspricht 3/4 * 365 + 1/4 * 366

Da er nur bei 0 und bei 1 greift alles andere wird durch das floor gecancelt, d.h.:
Code:
Jahr    in sek        $sek / (365.25 * 24 * 60 * 60);   if $jahr % 4 == 0
2000    63115200000   2000                              0
2001    63146736000   2001 -> unrounded 2000.99~        1
2002    63178272000   2002 -> unrounded 2001.99~        2
...                                                     0 (2004)
cytrobic ist offline  
Alt 14.09.2006, 14:26  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Du musst mit berücksichtigen, dass die 366 Tage ja auch nur bis zum 28/29.2 gelten.

Ab 1.3 sind es ja wieder 365 Tage

28.2.2000 bis 28.2.2001 = 366 Tage
1.3.2000 bis 1.3.2001 = 365 Tage
31.12.2000 bis 31.12.2001 = 365 Tage

das musst du in deiner Berechnung mit einbauen.

[edit]
genauer, die Berechnung von 366 Tagen fängt ja schon im Vorjahr des Schaltjahres statt, also für 2000
28.2.1999 bis 28.2.2000 = 365 Tage
1.3.1999 bis 1.3.2000 = 366 Tage

also genügt es nicht im allgemeinen von Januar zu Januar das Schaltjahr zu berücksichtigen sondern von März zu März
[/edit]
DiBo33 ist offline  
Alt 14.09.2006, 16:24  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

hmm guter hinwis dibo... werd mal schauen was ich daraus machen kann
__________________
keine
cytrobic ist offline  
Alt 14.09.2006, 17:21  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Du rechnest bis Sekunden runter?

Dann darfst du dich nachdem du die Schaltjahresberechnung gelöst hast an die Berechnung der Sommer-/Winterzeit dranmachen.
DiBo33 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem bei Zeitberechnung! Brauch dringend einen Tipp pit62 PHP Tipps 2006 10 11.07.2006 12:11
Zeitberechnung flual2000 PHP Tipps 2006 4 17.04.2006 15:29
Probleme Zeitberechnung PHP Tipps 2005-2 6 16.07.2005 21:46
Zeitberechnung mit 30min Schritten PHP Tipps 2005 2 11.04.2005 09:38
Schaltjahr HSFighter PHP Tipps 2005 18 08.02.2005 15:26
Verflixte Zeitberechnung, wer kann helfen PHP Tipps 2004 1 18.08.2004 17:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
schaltjahre seit 1970, schaltjahre ab 1970, schaltjahr php, schaltjahre ab 2000, php schaltjahr, schaltjahr 2005, schaltjahr 1970, schaltjahr berechnen php, php schaltjahr berechnen, schaltjahr rechnung, 2005 schaltjahr, schaltjahre ab 2005, schaltjahr 2006, www.schaltjahr.de, 1970 schaltjahr, 2001 schaltjahr, schaltjahr 2001, schaltjahre ab 2002, tage eines schaltjahres, schaltjahre

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.