Re: Erledigt !!! Bin aber für bessere Ideen offen ... - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Sascha Fitzner (476 Beiträge) am Freitag, 2.März.2001, 14:14. WWW: planet-gaga.de
    Re: Erledigt !!! Bin aber für bessere Ideen offen ...

      Vielleicht noch eine bessere idee! kommt auf deinen
      anwendungsfall an. wenn es dir ausreicht mit einem kaufmännischen tagediff zu arbeiten (kaufmännisch bedeutet: jahr hat 360 tage, jeder monat 30) dann hilft dir vielleicht der folgende gedankengang weiter.

      startzeit="15.12.2000"
      endezeit ="25.02.2001"

      zuerst musst du die datums mal in einzelne felder für tag, monat und jahr aufdrösseln. in diesem fall mal angenommen:

      startdatum aufgedrösselt in stt, smm und sjj
      endedatum aufgedrösselt in ett, emm und ejj

      berechnung wie folgt:

      differenztage=((ejj*360)+(emm*30)+ett) - ((sjj*360)+(smm*30)+stt)

      in folgendem beispiel also

      differenztage=720445 - 720375 (ergibt 70 tage)

      erläuterung der 70 tage:

      15 tage bis zum 30.12,
      30 tage für den januar
      25 tage bis zum 25. februar
      -----------------------------------
      70 tage gesamt

      sollte das ergebnis der berechnung negativ sein, so liegt dein startdatum in der zukunft.
      dann kannst du gegebenfalls mit -1 multiplizieren um es in einen positiven wert zu wandeln.

      wie gesagt: funktioniert nur kaufmännisch betrachtet,
      es werden keine 31 tage oder 28 tage berücksichtigt,
      und schon gar kein schaltjahr.

      vielleicht hilft es ja trotzdem ein wenig

      gruss sascha.


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Stephan Hix (106 Beiträge) am Donnerstag, 1.März.2001, 09:18.
    Vergangene Tage berechnen ... wie?

      Ich möchte für eine Statistik die vergangenen Tage seit einem bestimmten Datum berechnen. Wie geht das?
      In der Doku finde ich nur lt- bzw gt-Vergleiche.
      Und einen String in eine Perl-Zeit zurückzuverwandeln ging ja nicht, wegen der nicht eingebundenen Module.

      Hat jemand eine Idee?

      Gruß
      Stephan

     Antworten

    Beitrag von Stephan Hix (106 Beiträge) am Freitag, 2.März.2001, 08:36.
    Erledigt !!! Bin aber für bessere Ideen offen ...

      # Tage berechnen
      $start=datum("24.2.2001","Jahr.Monat.Tag");
      $tage=1;
      

      while($heute ne $start){
      $tage++;
      $heute=datum(jetzt-$tage,"Jahr.Monat.Tag");
      }
      

     Antworten

    Beitrag von Sascha Fitzner (476 Beiträge) am Freitag, 2.März.2001, 11:15. WWW: planet-gaga.de
    Re: Erledigt !!! Bin aber für bessere Ideen offen ...

      Vorsicht!

      Dein Beispiel kann ein Endlosläufer werden sobald das Startdatum grösser wie das Tagesdatum ist.

      Gruss Sascha.

     Antworten

    Beitrag von Stephan Hix (106 Beiträge) am Freitag, 2.März.2001, 11:21.
    Re: Erledigt !!! Bin aber für bessere Ideen offen ...

      Hallo Sascha!

      Da hast Du natürlich völlig recht, sollte man der Sicherheit halber ändern.
      Da es sich beim Startdatum aber wirklich um eine fixe Datumsangabe in der Vergangenheit handelt, besteht die Gefahr eigentlich nur, wenn Christoph die Serverzeit völlig falsch einstellt ;-)

      Gruß
      Stephan

     Antworten

    Beitrag von Sascha Fitzner (476 Beiträge) am Freitag, 2.März.2001, 14:14. WWW: planet-gaga.de
    Re: Erledigt !!! Bin aber für bessere Ideen offen ...

      Vielleicht noch eine bessere idee! kommt auf deinen
      anwendungsfall an. wenn es dir ausreicht mit einem kaufmännischen tagediff zu arbeiten (kaufmännisch bedeutet: jahr hat 360 tage, jeder monat 30) dann hilft dir vielleicht der folgende gedankengang weiter.

      startzeit="15.12.2000"
      endezeit ="25.02.2001"

      zuerst musst du die datums mal in einzelne felder für tag, monat und jahr aufdrösseln. in diesem fall mal angenommen:

      startdatum aufgedrösselt in stt, smm und sjj
      endedatum aufgedrösselt in ett, emm und ejj

      berechnung wie folgt:

      differenztage=((ejj*360)+(emm*30)+ett) - ((sjj*360)+(smm*30)+stt)

      in folgendem beispiel also

      differenztage=720445 - 720375 (ergibt 70 tage)

      erläuterung der 70 tage:

      15 tage bis zum 30.12,
      30 tage für den januar
      25 tage bis zum 25. februar
      -----------------------------------
      70 tage gesamt

      sollte das ergebnis der berechnung negativ sein, so liegt dein startdatum in der zukunft.
      dann kannst du gegebenfalls mit -1 multiplizieren um es in einen positiven wert zu wandeln.

      wie gesagt: funktioniert nur kaufmännisch betrachtet,
      es werden keine 31 tage oder 28 tage berücksichtigt,
      und schon gar kein schaltjahr.

      vielleicht hilft es ja trotzdem ein wenig

      gruss sascha.

     Antworten

    Beitrag von Sascha Fitzner (476 Beiträge) am Freitag, 2.März.2001, 14:32. WWW: planet-gaga.de
    Re: Erledigt !!! Bin aber für bessere Ideen offen ...

      achso nochwas!

      deine berechnung klappt natürlich! mach dir nur mal gedanken was bei dir passiert wenn dein startjahr 5 jahre in der vergangenheit liegt!

      dann wird deine schleife mehr als 1800 mal durchlaufen und sowas kostet zeit. das ergebniss kann sein das der betrachter deiner seite vor
      dem browser sitzt und däumchen dreht.

      gruss sascha

     Antworten

    Beitrag von Claus S. (1671 Beiträge) am Freitag, 2.März.2001, 15:03.
    Re: Erledigt !!! Bin aber für bessere Ideen offen ...

      hallo sascha,
      habe vor jahren mal was programmiert, was auch für grosse zeiträume funzt und keine grossen schleifen braucht:

      1.ende und startdatum aufdröseln ist klar
      2.array-E mit den tagen pro monat 31 59 90 etc.
      3.array-S mit den tagen pro monat 365 334 304 etc.
      4. ( ejj - sjj - 1 ) * 365 = x1
      5. array-S,smm - stt = x2
      6. array-E,(emm - 1) + ett = x3

      differenz= x1 + x2 + x3

      kurz und bündig, wobei hier noch das schaltjahrproblem zu berücksichtigen ist, das ist aber auch nur ein zwei bis dreizeiler. liefere ich nachher noch.
      hoffe habe keinen schreibfehler ;-)
      gruss
      claus

     Antworten

    Beitrag von Stephan Hix (106 Beiträge) am Freitag, 2.März.2001, 16:17.
    Re: Danke, Danke !!!

      Ich denke, der Rechenaufwand bei der folgenden Lösung ist vertretbar und es klappt auch mit dem Schaltjahr.

      Im Prinzip sind die Prüfschritte willkürlich, Jahr, Monat und Tag waren aber irgendwie gwohnte Größen.

      Bedenken wegen einer möglichen Endlosschleife sehe ich auch nicht mehr ... Alle Deine Anregungen bzgl. Funtkionalität berücksichtigt.

      </perl>
      # Tage berechnen
      $start=datum("24.2.2001","Jahr.Monat0.Tag0");
      $tage=1;
      $heute=datum("-$tage","Jahr.Monat0.Tag0");
      

      if($start ne $heute && $start lt $heute) {
       while($start lt $heute){
        $tage += 360;
        $heute=datum("-$tage","Jahr.Monat0.Tag0");
       }
       $tage-=360;
       $heute=datum("-$tage","Jahr.Monat0.Tag0");
       while($start lt $heute){
        $tage += 30;	
        $heute=datum("-$tage","Jahr.Monat0.Tag0");
       }
       $tage-=30;
       $heute=datum("-$tage","Jahr.Monat0.Tag0");
       while($start lt $heute){
        $tage=$tage+1;
        $heute=datum("-$tage","Jahr.Monat0.Tag0");
       }
      }
      </perl>
      


      Danke für Deine Hilfe jedenfalls.

      Gruß
      Stephan

     Antworten


     
 Liste der Einträge von 64650 bis 64800:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.13s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!