tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Quaese
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
401
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Hallo,

    ich ahbe auf einer Seite ein paar Datum-Berechnungen, die (wie ich durch Zuafall bemerkt habe) gar nicht richtig en).

    Es soll 4 Berechnungen geben
    1. letzten 2 Wochen
    2. letzer Monat
    3. letzten 3 Monate
    4. letzten 6 Monate

    Das Problem besteht darain, wenn Monats- oder Jahresgrenzen erreicht werden (aktuell bei monat6), werden die Werte negativ und somit unbrauchbar. Ich hatte schon angefangen, diese manuell zu korrigieren, was mich aber in Teufels Küche gebracht hat. Hat jemand eine Idee?


    PHP-Code:
        function getDateTime(auswahl)
        {
            var 
    currentTime = new Date();
            var 
    month currentTime.getMonth() + 1;
            var 
    day currentTime.getDate();
            var 
    year currentTime.getFullYear();
            var 
    monat2 currentTime.getMonth();
            var 
    day2 currentTime.getDate()-28;
            var 
    monat3 currentTime.getMonth()-2;
            var 
    monat6 currentTime.getMonth()-5;
             
            
    month=month+'';
            
    day=day+'';
            
    monat2=monat2+'';
            
    day2=day2+'';
            
    monat3=monat3+'';                
            
    monat6=monat6+'';
     

        
            if (
    month.length==1)  { month='0'+month; }
            if (
    day.length==1)    { day='0'+day; }
            if (
    monat2.length==1) { monat2='0'+monat2; }
            if (
    day2.length==1)   { day2='0'+day2; }
            if (
    monat3.length==1) { monat3='0'+monat3; }    
            if (
    monat6.length==1) { monat6='0'+monat6; }
                    
               if (
    auswahl == "2weeks")
            {         
    alert(year "-" month "-" day2);
                return (
    year "-" month "-" day2);
            }
            else if (
    auswahl == "lastmonth")
            {     
                return     (
    year "-" monat2 "-" day);
            }
            else if (
    auswahl == "last3month")
            {
                 
                return (
    year "-" monat3 "-" day);
            }
            else if (
    auswahl == "last6month")
            {
                return (
    year "-" monat6 "-" day);
                 
            }    
        } 
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    strtotime() nimmt dir diese Arbeit ab

    PHP-Code:
    <?php
        $date 
    time();
        echo 
    "1. letzten 2 Wochen: ".date("d.M.y"strtotime("-2 week"$date))."<br />";
        echo 
    "2. letzer Monat: ".date("M"strtotime("-1 month"$date))."<br />";    
    ?>
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Super vielen dank. Hab nur gerade bemerkt, dass das ganze javascript ist. Gibts dazu analog etwas?
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ich schreib mal einen Mod an, damit dies zu Javascript verschoben wird.. hier bist du demnach falsch
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    erstelle für die Berechnung neue Date-Objekte mit den neu berechneten Werten aus dem aktuellen Date-Objekt.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
            var currentTime = new Date();
     
            var month = (new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, currentTime.getDate())).getMonth();
            var day = currentTime.getDate();
            var year = currentTime.getFullYear();
            var monat2 = currentTime.getMonth();
            var day2 = (new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate()-28)).getDate();
            var monat3 = (new Date(currentTime.getFullYear(), currentTime.getMonth()-2, currentTime.getDate())).getMonth();
            var monat6 = (new Date(currentTime.getFullYear(), currentTime.getMonth()-5, currentTime.getDate())).getMonth();

    Ciao
    Quaese
     
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  6. #6
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Hi,

    besten dank erst einmal für die Antwort. Bin nicht so der crack und hab es daher leider auch nicht hinbekommen. Gebe ich mir monat6 aus
    Code :
    1
    
    alert(monat6);
    , kommt da 10 raus. Ist wohl der Monat. Da bei dieser Rechnung die Jahresgrenze überschriiten wird, muss vom jahr also 1 subtrahiert werden.

    Verstehe die Lösung nicht so ganz. Oder kannst due es etwas ausführlich machen, für Doofe

    thx
     

  7. #7
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    die 10 steht für den November. JS beginnt bei der Monatsnummerierung bei 0 und geht somit bis zur 11 für Dezember.

    Willst du die Jahreswechsel berücksichtigen, erstellst du Date-Objekte mit den erforderlichen Zeitänderungen - ausgehend vom aktuellen Datum. Die erhaltenen Objekte verwendest du nun zur Anzeige der Daten.

    Beispiel:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    function getDateTime(auswahl){
      var currentTime = new Date();
     
      // Einen Monat weiter
      var month = new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, currentTime.getDate());
      // 28 Tage zurück
      var day2 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate()-28);
      // Drei Monate zurück
      var monat3 = new Date(currentTime.getFullYear(), currentTime.getMonth()-3, currentTime.getDate());
      // Sechs Monate zurück
      var monat6 = new Date(currentTime.getFullYear(), currentTime.getMonth()-6, currentTime.getDate());
     
      if (auswahl == "2weeks"){
        return (day2.getFullYear() + " - " + ((day2.getMonth()<10)?"0"+day2.getMonth():day2.getMonth()) + " - " + ((day2.getDate()<10)?"0"+day2.getDate():day2.getDate()));
      }else if (auswahl == "lastmonth"){
        return (monat2.getFullYear() + " - " + ((monat2.getMonth()<10)?"0"+monat2.getMonth():monat2.getMonth()) + " - " + ((monat2.getDate()<10)?"0"+monat2.getDate():monat2.getDate()));
      }else if (auswahl == "last3month"){
        return (monat3.getFullYear() + " - " + ((monat3.getMonth()<10)?"0"+monat3.getMonth():monat3.getMonth()) + " - " + ((monat3.getDate()<10)?"0"+monat3.getDate():monat3.getDate()));
      }else if (auswahl == "last6month"){
        return (monat6.getFullYear() + " - " + ((monat6.getMonth()<10)?"0"+monat6.getMonth():monat6.getMonth()) + " - " + ((monat6.getDate()<10)?"0"+monat6.getDate():monat6.getDate()));
      }
    }
     
    alert(getDateTime("last6month"));

    Ciao
    Quaese
    webbudda bedankt sich. 
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  8. #8
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Hi,

    ich habe bei den Monaten jetzt einen weniger subtrahiert, weil er immer einen Monat zu weit war. Ausserdem habe ich "var monat2" ergänzt.
    Hoffe das passt so?!

    Das mit letzte 2 Wochen klappt jedenfalls mit -28 bzw. auch mit -14 tage nicht.

    Eine Idee?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    function getDateTime(auswahl)
        {
             
              var currentTime = new Date();
     
              // Einen Monat weiter
              var month = new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, currentTime.getDate());
              // 28 Tage zurück
              var day2 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate()-28);
              var monat2 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate());
              // Drei Monate zurück
              var monat3 = new Date(currentTime.getFullYear(), currentTime.getMonth()-2, currentTime.getDate());
              // Sechs Monate zurück
              var monat6 = new Date(currentTime.getFullYear(), currentTime.getMonth()-5, currentTime.getDate());
     
              if (auswahl == "2weeks"){
                alert((day2.getFullYear() + "-" + ((day2.getMonth()<10)?"0"+day2.getMonth():day2.getMonth()) + "-" + ((day2.getDate()<10)?"0"+day2.getDate():day2.getDate())));
            
            
              }else if (auswahl == "lastmonth"){
                alert(monat2.getFullYear() + "-" + ((monat2.getMonth()<10)?"0"+monat2.getMonth():monat2.getMonth()) + "-" + ((monat2.getDate()<10)?"0"+monat2.getDate():monat2.getDate()));
               
              }else if (auswahl == "last3month"){
                alert(monat3.getFullYear() + "-" + ((monat3.getMonth()<10)?"0"+monat3.getMonth():monat3.getMonth()) + "-" + ((monat3.getDate()<10)?"0"+monat3.getDate():monat3.getDate()));
            
            
              }else if (auswahl == "last6month"){
                alert(monat6.getFullYear() + "-" + ((monat6.getMonth()<10)?"0"+monat6.getMonth():monat6.getMonth()) + "-" + ((monat6.getDate()<10)?"0"+monat6.getDate():monat6.getDate()));         
                    
              }
     

  9. #9
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    bei mir stimmen die Tagesberechnungen - sowohl für 14 als auch für 28 Tage.

    Ebenso passen die Monatsberechnungen wie sie in meinem Beitrag stehen. Du hast gelesen, dass die Zählung der Monate bei 0 beginnt?

    Wenn du mit monat2 den Zeitpunkt berechnen möchtest, der zwei Monate zurück liegt, solltest du 2 substrahieren.


    Ciao
    Quaese
     
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  10. #10
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    Monat2 gab es in deinem Code nicht.

    Bei mir passen die Monate nicht: immer einer zu wenig nach deinem Code.

    Das mit der 28 versgehe ich auch nicht. Müsste da nicht 14 stehen: 2 wochen?
    Da schmeisst er mir heute 2010-03-12 (mit -28)

    Woran kanns liegen?
     

  11. #11
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    wenn du ein Datum suchst, das 14 Tage in der Vergangenheit liegt, solltest du die 28 selbstverständlich gegen 14 austauschen. Soviel Eigeninitiative hatte ich vorausgesetzt.

    Und ein letztes Mal: die Monatsnummerierung beginnt beim Date-Objekt bei 0.
    D.h. 0=Januar, 1=Februar, ..., 11=Dezember. Diese Integerwerte liefert dir die Methode getMonth zurück und sie werden intern zur Datumsberechnung verwendet.

    Mehr zum Date-Objekt findest du bei SelfHTML, auch speziell zu den Monaten und deren Darstellung.

    Ciao
    Quaese
     
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  12. #12
    webbudda webbudda ist offline Mitglied Bronze
    Registriert seit
    Sep 2009
    Beiträge
    46
    habe natürlich auch 14 eingesetzt, was ja bereits viele posts vorher steht.

    finde deine hilfe sehr nett und frage mich nur, wie dieser code bei dir richtige ergebnisse zaubert.

    bei mir klappt es nur so:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
            function getDateTime(auswahl)
        {
             
              var currentTime = new Date();
     
              // Einen Monat weiter
              var month = new Date(currentTime.getFullYear(), currentTime.getMonth() + 0, currentTime.getDate());
              // 28 Tage zurück
              var day2 = new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, currentTime.getDate()-14);
              var monat2 = new Date(currentTime.getFullYear(), currentTime.getMonth()-0, currentTime.getDate());
              // Drei Monate zurück
              var monat3 = new Date(currentTime.getFullYear(), currentTime.getMonth()-2, currentTime.getDate());
              // Sechs Monate zurück
              var monat6 = new Date(currentTime.getFullYear(), currentTime.getMonth()-5, currentTime.getDate());
     
              if (auswahl == "2weeks"){
                alert((day2.getFullYear() + "-" + ((day2.getMonth()<10)?"0"+day2.getMonth():day2.getMonth()) + "-" + ((day2.getDate()<10)?"0"+day2.getDate():day2.getDate())));
                return (day2.getFullYear() + "-" + ((day2.getMonth()<10)?"0"+day2.getMonth():day2.getMonth()) + "-" + ((day2.getDate()<10)?"0"+day2.getDate():day2.getDate()));
            
              }else if (auswahl == "lastmonth"){
                alert(monat2.getFullYear() + "-" + ((monat2.getMonth()<10)?"0"+monat2.getMonth():monat2.getMonth()) + "-" + ((monat2.getDate()<10)?"0"+monat2.getDate():monat2.getDate()));
                return (monat2.getFullYear() + "-" + ((monat2.getMonth()<10)?"0"+monat2.getMonth():monat2.getMonth()) + "-" + ((monat2.getDate()<10)?"0"+monat2.getDate():monat2.getDate()));
            
              }else if (auswahl == "last3month"){
                alert(monat3.getFullYear() + "-" + ((monat3.getMonth()<10)?"0"+monat3.getMonth():monat3.getMonth()) + "-" + ((monat3.getDate()<10)?"0"+monat3.getDate():monat3.getDate()));
                return (monat3.getFullYear() + "-" + ((monat3.getMonth()<10)?"0"+monat3.getMonth():monat3.getMonth()) + "-" + ((monat3.getDate()<10)?"0"+monat3.getDate():monat3.getDate()));
            
              }else if (auswahl == "last6month"){
                alert(monat6.getFullYear() + "-" + ((monat6.getMonth()<10)?"0"+monat6.getMonth():monat6.getMonth()) + "-" + ((monat6.getDate()<10)?"0"+monat6.getDate():monat6.getDate()));         
                return (monat6.getFullYear() + "-" + ((monat6.getMonth()<10)?"0"+monat6.getMonth():monat6.getMonth()) + "-" + ((monat6.getDate()<10)?"0"+monat6.getDate():monat6.getDate()));
            
     
            
              }
     

  13. #13
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    reden wir von der Ausgabe oder von der Berechnung?

    Die Berechnung wird so, wie ich sie dir gezeigt habe, richtig durchgeführt. Willst du, dass bei der Ausgabe z.B. für den Dezember die 12 statt der 11 steht, so musst du Eins bei der Ausgabe addieren.

    Im folgenden Beispiel ist die Korrektur für 2weeks aufgezeigt:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    function getDateTime(auswahl){
     
      var currentTime = new Date();
     
      // Einen Monat weiter
      var month = new Date(currentTime.getFullYear(), currentTime.getMonth() + 1, currentTime.getDate());
      // 14 Tage zurück
      var day2 = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate()-14);
      var monat2 = new Date(currentTime.getFullYear(), currentTime.getMonth()-1, currentTime.getDate());
      // Drei Monate zurück
      var monat3 = new Date(currentTime.getFullYear(), currentTime.getMonth()-3, currentTime.getDate());
      // Sechs Monate zurück
      var monat6 = new Date(currentTime.getFullYear(), currentTime.getMonth()-6, currentTime.getDate());
     
      if (auswahl == "2weeks"){
        alert((day2.getFullYear() + "-" + [B]((day2.getMonth()[COLOR="Red"]+1[/COLOR]<10)?"0"+(day2.getMonth()[COLOR="Red"]+1[/COLOR]):day2.getMonth()[COLOR="Red"]+1[/COLOR])[/B] + "-" + ((day2.getDate()<10)?"0"+day2.getDate():day2.getDate())));
        return (day2.getFullYear() + "-" + ((day2.getMonth()+1<10)?"0"+(day2.getMonth()+1):day2.getMonth()+1) + "-" + ((day2.getDate()<10)?"0"+day2.getDate():day2.getDate()));
      }else if (auswahl == "lastmonth"){
        alert(monat2.getFullYear() + "-" + ((monat2.getMonth()<10)?"0"+monat2.getMonth():monat2.getMonth()) + "-" + ((monat2.getDate()<10)?"0"+monat2.getDate():monat2.getDate()));
        return (monat2.getFullYear() + "-" + ((monat2.getMonth()<10)?"0"+monat2.getMonth():monat2.getMonth()) + "-" + ((monat2.getDate()<10)?"0"+monat2.getDate():monat2.getDate()));
      }else if (auswahl == "last3month"){
        alert(monat3.getFullYear() + "-" + ((monat3.getMonth()<10)?"0"+monat3.getMonth():monat3.getMonth()) + "-" + ((monat3.getDate()<10)?"0"+monat3.getDate():monat3.getDate()));
        return (monat3.getFullYear() + "-" + ((monat3.getMonth()<10)?"0"+monat3.getMonth():monat3.getMonth()) + "-" + ((monat3.getDate()<10)?"0"+monat3.getDate():monat3.getDate()));
      }else if (auswahl == "last6month"){
        alert(monat6.getFullYear() + "-" + ((monat6.getMonth()<10)?"0"+monat6.getMonth():monat6.getMonth()) + "-" + ((monat6.getDate()<10)?"0"+monat6.getDate():monat6.getDate()));
        return (monat6.getFullYear() + "-" + ((monat6.getMonth()<10)?"0"+monat6.getMonth():monat6.getMonth()) + "-" + ((monat6.getDate()<10)?"0"+monat6.getDate():monat6.getDate()));
      }
    }

    Ciao
    Quaese
     
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

Ähnliche Themen

  1. Berechnungen für 3d-Ansicht
    Von Nord-Süd-Richtung im Forum Coders Talk
    Antworten: 7
    Letzter Beitrag: 09.03.10, 18:54
  2. SQL/Oracle date/time -> suche Date
    Von Goldman im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 20.05.09, 15:28
  3. [C#] Access DATE != DataGridView DATE ? + Daten ändern, aber wie?
    Von Blackhawk50000 im Forum .NET Windows Forms
    Antworten: 22
    Letzter Beitrag: 31.07.08, 16:26
  4. Berechnungen****?
    Von Blattspinat im Forum PHP
    Antworten: 3
    Letzter Beitrag: 23.01.03, 18:27
  5. Berechnungen in HTML?
    Von Election im Forum HTML & XHTML
    Antworten: 5
    Letzter Beitrag: 01.03.02, 14:21