Datum vorausberechnen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datum vorausberechnen?

    Hallo,
    ich habe wieder ein Problem wo ich nicht weiter weis.

    Ich möchte gerne mittels (INTERVAL) Datensätze zwischen StartDatum und EndDatum ausgeben lassen. Dieses FifferenzDatum sollte genau 1 Monat sein.

    Also z.B. User meldet sich am 15.02.2009 an, jetzt möchte ich gerne das er alle Datensätze [COLOR="Red"]im AKTUELLEN Monat[/COLOR], dem 15.06.2010 und dem 15.07.2010 aufgelistet bekommt. Ich habe es so einigermaßen hinbekommen aber das ist leider etwas zu ungenau. Ich habe die Tage von Anmeldedatum bis Heute durch 30.42 Tage geteilt. Und das ganze dann mittels CEIL gerundet. Diesen Wert habe ich dann in meinem SQLQuery genutzt. Nur leider ist diese Methode zu ungenau.

    Gibt es dafür vielleicht eine bessere Möglichkeit?


    Code:
    	$sql = "SELECT DATEDIFF(NOW(), anmeldung) as differenz ";
            $sql .= "FROM `user` WHERE `id` = '123456789' LIMIT 1";
    	$query0 = mysql_query($sql, $db_connect);
    	$diffmonat = mysql_fetch_row($query0);
    	$calcmonat = ceil($diffmonat['0']/30.42-1);
    
    
    
    	$sql = "SELECT *, ";
    
    	$sql .= "DATE_FORMAT(anmeldung, '%d.%m.%Y - %H:%i') AS fanmeldung, ";
    	$sql .= "DATE_FORMAT(indexend, '%d.%m.%Y - %H:%i') AS findexend, ";
    	$sql .= "DATE_ADD(indexend, INTERVAL `ival` DAY) AS indexnext, ";
    	
    	$sql .= "DATE_ADD(anmeldung, INTERVAL ".$calcmonat." MONTH) AS startmonat, ";
    	$sql .= "DATE_ADD(anmeldung, INTERVAL ".$calcmonat."+1 MONTH) AS endemonat, ";
    
    	$sql .= "FROM user ";
    	$sql .= "left join kunden ON kunden.id = user.id ";
    	$sql .= " WHERE `user`.`id` = '123456789' LIMIT 1";
    Cu SusiSorglos
    Zuletzt geändert von SusiSorglos; 03.07.2010, 12:24.
    PHP 8.0, MariaDB 10.5 auf U20.04

  • #2
    Hallo,

    bitte Beitrag bearbeiten und nur den reinen SQL-Code darstellen. PHP-Code stört in diesem Unterforum nur bei der Fehlersuche.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Warum so umständlich?

      SELECT ... WHERE col BETWEEN CURDATE() AND DATE_ADD(CURDATE(),30)

      Kommentar


      • #4
        ich glaube das ist nicht ganz das was ich suche, oder?

        Ich möchte aus dem Verlauf vom 15.02.2009 einen Bereich ausgeben. Das wäre bei heutigen Datum [03.07.2010] also der Bereich 15.06.2010 - 12:00:00 bis 15.07.2010 - 11:59:59 Uhr.
        PHP 8.0, MariaDB 10.5 auf U20.04

        Kommentar


        • #5
          Du hast immer noch nicht deinen Code angepasst.
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            ??? unverständnis....

            Ich habe nun den Code auf die geforderten 100 Zeichen begrenztzt (hoffe ich).

            Das mit dem PHP-Code verstehe ich nicht (oder will ich nicht verstehen)
            Wenn ich den noch raus nehme, versteht doch keiner mehr den Code!?

            Cu SusiSorglos
            PHP 8.0, MariaDB 10.5 auf U20.04

            Kommentar


            • #7
              Zitat von SusiSorglos Beitrag anzeigen
              Wenn ich den noch raus nehme, versteht doch keiner mehr den Code!?
              Das sagst du, aber ich versteh den auch so nicht. Wozu brauchst du das Anmeldedatum? Wieso liegt der Bereich den du ausgeben willst, im Zeitraum zwischen vor 2 Wochen und 2 Wochen in der Zukunft? Hast du dafür schon Daten? Warum nicht die letzten 4 Wochen oder den letzten Monat anzeigen? Deine Problembeschreibung ist also nicht so ganz nachvollziehbar.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Finde ich schon..

                Beispiel. Du hast einen DSL Vertrag abgeschlossen.. Der beginnt doch auch nicht immer am 01.01.2010. Sondern Du bekommst deine Rechnung doch sicherlich auch immer zu einem bestimmten Datum. Also am 03.07. und dann am 03.08 usw.usw. Und da ein Monat nicht immer gleich viele Tage hat, ist es zudem noch etwas schwer zu berechnen.
                PHP 8.0, MariaDB 10.5 auf U20.04

                Kommentar


                • #9
                  Jetzt hab ich erstmal verstanden, was du meinst.

                  Ganz ohne PHP-Code, so in etwa?:

                  PHP-Code:
                  where `irgendwasbetween
                      str_to_date
                  (concat_ws('-'year(curdate()), month(curdate()), day(`anmeldung`)), '%Y-%m-%d')
                          + 
                  interval 0 day -- Überlaufkorrektur
                          
                  interval if(day(curdate()) < day(`anmeldung`), 10month
                      
                  and
                      
                  str_to_date(concat_ws('-'year(curdate()), month(curdate()), day(`anmeldung`)), '%Y-%m-%d')
                          + 
                  interval 0 day -- Überlaufkorrektur
                          
                  interval if(day(curdate()) <= day(`anmeldung`), 01month 
                  Zuletzt geändert von AmicaNoctis; 03.07.2010, 13:48. Grund: Vergleichsoperatoren waren doch nicht falsch herum
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    Jetzt wirds anschaulich, was du willst.

                    Du musst lediglich zum Anmeldedatum die Anzahl der seitdem vergangenen Monate addieren, dann hast du sowohl Unter- als auch Obergrenze. Etwas aufwendiger wird wohl die Berechnung der vergangenen Monate - ich kenne nur Funktionen zur Berechnung der vergangenen Tage, was aber auch genügt, da du daraus schätzen kannst, wieviel Monate es sind. Über ein paar einfache Vergleiche solltest du die Grenzen daraus leicht bestimmen können.

                    €: siehe Beitrag AmicaNoctis über mir
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      Vielen Dank soweit,

                      mal sehen ob ich es so umgesetzt bekomme das es dann auch richtig bei mir läuft. Verstehe den Code noch nicht so ganz und muss ihn erst mal anhand der Manu verstehen.

                      Ich konnte es zwischenzeitlich mit PHP perfekt lösen. Den Code poste ich hier nun nicht, weil wie wir gelernt haben, ist es ja PHP und kein SQL Code
                      Werde aber dennoch die SQL-Variante versuchen anzuwenden, aus lernzwecken

                      Cu SusiSorglos
                      PHP 8.0, MariaDB 10.5 auf U20.04

                      Kommentar


                      • #12
                        Hab den Code nochmal korrigiert, die Vergleiche waren falsch herum.

                        Edit: nochmal korrigiert, sie waren doch richtig. Setzt mir doch die Hitze zu? *grübel*
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar

                        Lädt...
                        X