Marco Weber: zeiträume abfragen??

Hallo!
Also ich habe vor eine EVENT database zu erstellen und alles läuft bis auf eine kleinigkeit...

er geht in einer while schleife alle einträge in der database duch:
folgende werte erhält er somit bei jedem durchgang:
$startyear = startjahr des events
$startmonth = startmonat des events
$startday = starttag des events
$stopyear = stopjahr des events
$stopmonth = stopmonat des events
$stopday = stoptag des events

der benutzer hat durch die eingabe im script die folgenden werte spezifiziert (der zeitraum in dem die events gesucht werden müssen):
$beginyear
$beginmonth
$beginday
$endyear
$endmonth
$endday

was ich möchte:
der benutzer gibt also eine zeitspanne ein... das script soll alle einträge auswerfen die sich in dieser zeitspanne befinden...

Also wenn z.b. folgende events erfasst sind:
14.03.2001 -  16.03.2001 xyz1
15.03.2001 -  21.03.2001 abc
20.03.2001 -  24.03.2001 efg
17.03.2001 -  18.03.2001 lmn
24.03.2001 -  30.03.2001 phg
19.03.2001 -  21.03.2001 zgj

und der benutzer alle ereignisse vom 15.03.2001 bis 20.03.2001 abfragen will so müssten die folgenden einträge angezeigt werden:
14.03.2001 -  16.03.2001 xyz1
15.03.2001 -  21.03.2001 abc
20.03.2001 -  24.03.2001 efg
17.03.2001 -  18.03.2001 lmn
19.03.2001 -  21.03.2001 zgj

wie mache ich das?? ich bin mit meinem latein am ende, da mir kein vernüftiger ansatz einfällt... :-(

Vielen Dank im voraus für jegliche Hilfe

MFG Marco

  1. Sup!

    Was hast Du für ein Glück das die Sonne scheint und SUPER-Bio unterwegs ist ;-)

    was ich möchte:
    der benutzer gibt also eine zeitspanne ein... das script soll alle einträge auswerfen die sich in dieser zeitspanne befinden...

    Also wenn z.b. folgende events erfasst sind:
    14.03.2001 -  16.03.2001 xyz1
    15.03.2001 -  21.03.2001 abc
    20.03.2001 -  24.03.2001 efg
    17.03.2001 -  18.03.2001 lmn
    24.03.2001 -  30.03.2001 phg
    19.03.2001 -  21.03.2001 zgj

    und der benutzer alle ereignisse vom 15.03.2001 bis 20.03.2001 abfragen will so müssten die folgenden einträge angezeigt werden:
    14.03.2001 -  16.03.2001 xyz1
    15.03.2001 -  21.03.2001 abc
    20.03.2001 -  24.03.2001 efg
    17.03.2001 -  18.03.2001 lmn
    19.03.2001 -  21.03.2001 zgj

    Das heisst, Du willst alle Ereignisse ausgeben, die Überschneidungen mit den angegebenen Terminen haben, denn sonst wäre ja z.B. 14.03.2001 - 16.03.2001 nicht innerhalb von 15.03.2001 - 20.03.2001.

    Das ist schwierig - aber SUPER-Bio wird Dich retten!

    Wenn das Startdatum des Events kleiner ist als das Enddatum des Benutzer(definierten)zeitraums UND das Enddatum des Events groesser ist als das Startdatum des Benutzerzeitraums, dann liegt das Event teilweise oder ganz im Benutzerzeitraum! Tataaaa!

    Hier eine kleine "Grafik":

    Benutzerzeitraum
               |-----------|

    |-Event1--|
               |-Event2----|
                    |-Event3--|

    Für alle gilt: Eventstart < Benutzerzeitraumende
                   Eventende  > Benutzerzeitraumstart

    |-Event4-|
                              |-Event5-|

    Diese Events sind also nicht mehr drin.

    Du brauchst nur noch die Daten in Sekunden ab 1970 umrechnen, und es geht (mindestens bis 2038).

    Gruesse,

    SUPER-Bio

    1. Moin Bio,

      Du brauchst nur noch die Daten in Sekunden ab 1970 umrechnen, und es geht (mindestens bis 2038).

      unter *x mit signed longint timestamps und einer normalen C-Lib bis 2037.
      nur um der Korrektheit willen ;)

      Viele Gruesse,

      n.d.p.

    2. Danke zuerst mal ! :-)
      Also wenn ich mich nun etwas dumm stelle:
      wie kann ich ein datum mit den vorliegenden angaben in sekunden nach 1970 umrechnen ?? *g*
      ich glaube daran wird es wohl gelegen haben...

      dann brauche ich also nur die daten so zu vergleichen wie du es mir beschrieben hattest...

      ALSO WIE MACHE ICH DAS MIT DEM UMRECHNEN IN SEKUNDEN NACH 1970 ??

      MFG MARCO

      1. Moin,

        ALSO WIE MACHE ICH DAS MIT DEM UMRECHNEN IN SEKUNDEN NACH 1970 ??

        aua, deine shift-Taste solltest du mal wechseln lassen, die klemmt ;)

        es gibt ein Perlmodul, was das kann: Time::Local
        die Doku ist da auch gleich dabei:

        perldoc Time::Local (in der Kommandozeile eingeben und staunen)

        Viele Gruesse,

        n.d.p.

        1. Hey Leute!

          Meine frage war:
          ALSO WIE MACHE ICH DAS MIT DEM UMRECHNEN IN SEKUNDEN NACH 1970 ??

          Die Antwort war...

          aua, deine shift-Taste solltest du mal wechseln lassen, die klemmt ;)

          es gibt ein Perlmodul, was das kann: Time::Local
          die Doku ist da auch gleich dabei:

          perldoc Time::Local (in der Kommandozeile eingeben und staunen)

          Das Ergebniss war: Ich habe den rat befolgt, jedoch kommt bei mir nix??

          entweder habe ich kein solches modul oder was weiss ich...

          hat keiner einen algorithmus dazu??

          MFG Marco

          1. Hallo

            Meine frage war:
            ALSO WIE MACHE ICH DAS MIT DEM UMRECHNEN IN SEKUNDEN NACH 1970 ??

            Die Antwort war...

            aua, deine shift-Taste solltest du mal wechseln lassen, die klemmt ;)

            Und die gilt anscheinend immer noch. Bitte lese _und_ beachte http://learn.to/quote

            perldoc Time::Local (in der Kommandozeile eingeben und staunen)

            Das Ergebniss war: Ich habe den rat befolgt, jedoch kommt bei mir nix??
            entweder habe ich kein solches modul oder was weiss ich...

            Dann installier es bitte. Deine Perl-Distribution weiß Rat.
            Linux:  perl -MCPAN -e shell
             install Time::Local

            oder auf cpan.org tar.gz Paket runterladen und manuell installieren.

            ActiveState
            ppm Time::Local
            oder so ähnlich, hab noch nicht damit gearbeitet.

            hat keiner einen algorithmus dazu??

            Time::Local und ggf. kann man auch Date::Calc benutzen mit der sehr nützlichen Funktion Compress Funktion. Das ist hilfreich, wenn es dir reicht, ganze Tage zu betrachten.

            perl -MDate::Calc -e 'print Compress(Today())."\n"; '

            einfach mal ausprobieren

            Tschö Matti

    3. Hallo »» Sup!-ER-Bio!

      Was hast Du für ein Glück das die Sonne scheint und SUPER-Bio unterwegs ist ;-)

      Als Bio nur Bio war und noch nicht SUPER, hat er noch auf ordentliche Rechtschreibung sehr viel wert gelegt, meine ich wenigstens, mich zu erinnern...

      Was hast Du für ein Glück*,* das*s* die Sonne scheint und SUPER-Bio unterwegs ist.............

      ;-P

      Patrick
      <hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash>

  2. Hallo Marco,

    für diesen Fall reicht die einfache Lösung, das Datum in sek. seit 1970 umzurechnen. Wenn Du aber oft Datumsberechnungen auszuführen hast, denn lohnt sich vielleicht der Einsatz eines Moduls. Bei http://www.engelschall.com/u/sb/download/ findest Du Date::Calc. Das stellt viele Datumsfunktionen zur Verfügung. Wennn Dein Provider das Modul nicht installiert hat und es auch nicht tun will, findest Du auch eine "Perl Only" Version dort.

    Gruß Frank