philipp: Timestamp von heute in einem Jahr

Hallo,

wie errechne ich den Unix Timestamp mit Perl in einem Jahr?
Mit PHP kann ich das ja mit mktime machen, jedoch habe ich noch nichts gleichwertiges in Perl gefunden.

  1. Hallo Philipp

    wie errechne ich den Unix Timestamp mit Perl in einem Jahr?
    Mit PHP kann ich das ja mit mktime machen, jedoch habe ich noch nichts gleichwertiges in Perl gefunden.

    doch, mit

    timelocal(0,0,0,$tagheute,$monatheute,$monatjahr+1);

    Viele Grüße

    Antje

    1. Hallo Antje,

      angenommen ich habe einen Timestamp, irgendwann erstellt und zwischengespeichert, und nun möchte ich überprüfen ob dieser Timestamp älter als ein Jahr ist.

      Angenommen ich löse das Problem in PHP:

      • ich erstelle mir aus dem Timestamp mit der Funktion strftime() 3 Variablen, jede enthält einen Parameter: Tag, Monat, Jahr.

      • Dann verwende ich die Funktion mktime wie in deinem Beispiel (sollte es nicht so aufgenaut sein: timelocal(stunden,minuten,sekunden,monat,tag,jahr) ?

      timelocal(0,0,0,$tagheute,$monatheute,$monatjahr+1);

      • In dem erstellen String habe ich dann vorherigen Timstamp, jedoch nur das Jahr eine Stelle weiter.

      Wie kann ich nun diese drei Parameter (Tag, Monat, Jahr) aus dem Timestamp mit Perl rausziehen?

      1. Hi!

        Angenommen ich löse das Problem in PHP:

        • ich erstelle mir aus dem Timestamp mit der Funktion strftime() 3 Variablen, jede enthält einen Parameter: Tag, Monat, Jahr.

        Dazu dienen in Perl die Funktionen gmtime() und localtime(), je nachdem, ob die zu erhaltenden Zahlen in GMT oder der lokalen Zeitzone gerechnet sein sollen.

        • Dann verwende ich die Funktion mktime wie in deinem Beispiel (sollte es nicht so aufgenaut sein: timelocal(stunden,minuten,sekunden,monat,tag,jahr) ?

        Doku lesen, da wirst Du feststellen, dass Antje ganz recht hatte.

        timelocal(0,0,0,$tagheute,$monatheute,$monatjahr+1);

        timelocal() verwendest Du uebrigens, wenn Du fuer die vorherige Umrechnung localtime() verwendet hast. Hast Du vorher mit gmtime() gerechnet, musst Du an dieser Stelle timegm() nehmen, was aber ansonsten genauso funktioniert wie timelocal(). Ich wuerde die zweite Variante bevorzugen (also immer mit GMT rechnen), da so ueberraschende Nebeneffekte wegen des Zeitzonenwechsels bei Sommer-/Winterzeitumstellung vermieden werden.

        Hinweise zu timelocal() bzw timegm():
        * Du musst vorher Time::Local einbinden (use)
        * Monat ist immer 1 weniger als die menschen-uebliche Zaehlweise
        * Jahr ist 1900 weniger als das vierstellige Jahr (somit also die Anzahl der Jahre seit 1900)

        Das findest Du natuerlich auch alles in der Dokumentation:
          perldoc Time::Local

        So long

        --
        In God we trust, everybody else we monitor...

    2. Hallo Antje

      Dumme Frage: Seit wann kannst Du Perl?!?!?!

      LG
      Aqua