Datum vergleichen ohne mktime

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

  • Datum vergleichen ohne mktime

    Hi Leute!
    Ich programmiere gerade ein Script für ne persische Seite und ich bin auf ein Problem gestoßen wo ich nicht mehr weiter weiß.

    Ich möchte Überprüfen ob ein Beitrag älter als 10 tage ist, wenn ja soll es nicht mehr angezeigt werden bzw. die Schleife abgebrochen werden.

    da das Datum im persischen Kalender ist, (heute ist im persischen Kalender: 16.11.1387 ) kann ich nicht mit Unixtime arbeiten. Und mein versuch über Formatierung in
    Date('Y-m-d') und dann vergleichen ist leider auch gescheitert.
    Ausserdem habe ich versucht das Jahr zu vergleichen und dann mit "Date('z')-10" zu arbeiten hat auch nicht geklappt, da mein Kalender so gut wie alle befehle aus PHP Date akzeptiert nur nicht das "z"

    Hier kurz mein Code:
    PHP-Code:
    if((jdate("Y-m-d",time()-864000)) > (((the_date('Y-m-d'))))) break; 
    jdate= gibt das heutige datum im persischen Kalender an(und davon 10 abgezogen)

    the_date=gibt das datum vom Beitrag an (Wordpress)


    Ich bin für jeder Hilfe dankbar, bin schon total am verzweifeln Es müssen auch nicht immer 10 Tage sein wenn es an manchen Monaten 11 oder 12 sind macht es auch nichts *g*


    Auf jedenfall danke im voraus

  • #2
    PHP-Code:
    echo jdate("Y-m-d",time()-864000) . " " the_date('Y-m-d'); 
    Was kommt da raus?

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Wie speicherst Du die Daten intern?

      Warum kannst Du Daten nicht als Unixtime speichern, Rechen- und Vergleichsoperationen als Unixtime durchführen und erst bei der Ausgabe in das persische Format umrechnen?

      Kommentar


      • #4
        "1387-11-06" "1387-11-16"

        Wobei das "1387-11-16", der erstellungsdatum des Beitrages ist.

        Kommentar


        • #5
          Gut, jetzt geh gedanklich deinen Code mit den zwei Zahlen mal durch und überprüfe durch Einfügen von
          PHP-Code:
          die("hier"); 
          an diversen Stellen, ob der Code auch wirklich all das so macht wie du es erwartest.

          (Tendenziell ist übrigens die Variante von pekka zu bevorzugen. Das Datum in einem sinnvollen Format abspeichern und dann nach Bedarf umformatieren.)

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            @pekka es läuft alles über diesen Wordpress Plugin http://wordpress.org/extend/plugins/wp-jalali/
            und alle datumsangaben sind so im perischen Kalender umgerechnet.
            Ich kann auf das Beitragsdatum nur über die Wordpress Tags the_date oder the_time zugreifen.
            Wobei ich gerad gesehen hab, dass ich (im gegensatz zu oben) the_time benutzen muss da es sein kann, dass mehrere Beiträge den selben Datum haben.

            Unixtime kann ich nicht benutzen da kein Datum vor dem 13. Dezember 1901 ( http://de.wikipedia.org/wiki/Unixtim...9Cberlauf_2038 )
            darstellbar ist, aber jetzt im persischen Kalender jahr 1386 ist.


            @ghostgambler ich versuche durch viele Ausgaben um zu erfahren was da intern vor sich geht ich hab das mit diesem vergleich versucht:

            PHP-Code:
            $postdaum=the_time('Y-m-d');
            echo(
            $postdaum."<br>"); //Hier wird der richtige Postdatum angezeigt

            $datumminus10=(jdate('Y-m-d',time()-864000));
            echo(
            $datumminus10."<br>"); //Hier wird richtig der Tag vor 10 Tagen ausgegeben


             
            if ($datumminus10 $postdaum) echo("IST GROESSER "); 
            Aber bei der If anweisung steht bei allen Beiträgen egal ob die vor 10 Monaten erstellt worden sind oder heute "IST GROESSER" raus d.h. die if Anweisung gibt immer true aus.

            Kommentar


            • #7
              Unixtime kann ich nicht benutzen da kein Datum vor dem 13. Dezember 1901 ( http://de.wikipedia.org/wiki/Unixti....9Cberlauf_2038 )
              darstellbar ist, aber jetzt im persischen Kalender jahr 1386 ist.
              Nein, Denkfehler!
              Ich meine: Speichere das echte Datum - nicht ein, wie Du korrekt sagst nicht darstellbares Fake-1386 - im westlichen Format (=Unixtime) und rechne es erst bei der Ausgabeins persische um.

              Also:
              Heute ist Mittwoch, der 4. Februar 2009
              => Du arbeitest intern in der Datenbank mit diesem Datum
              => Du führst alle Rechenoperationen mit diesem Datum durch

              Erst bei der Ausgabe rechnest du um:
              Mittwoch, 4. Februar 2009
              in
              16. Bahman 1387

              Wenn Du 10 Tage von einem beliebigen Datum abziehen mußt, tust Du dies von Unixtime zu Unixtime. Das Ergebnis ist dann ein Unixtime-Datum, das Du für die Ausgabe wieder ins persische umrechnest.

              EDIT:
              Aber in deinem letzten Post scheinst du ja schon eine Lösung zu haben.
              Zuletzt geändert von pekka; 04.02.2009, 12:53.

              Kommentar


              • #8
                Original geschrieben von pekka
                Nein, Denkfehler!
                Ich meine: Speichere das echte Datum - nicht ein, wie Du korrekt sagst nicht darstellbares Fake-1386 - im westlichen Format (=Unixtime) und rechne es erst bei der Ausgabeins persische um.
                Das problem ist das ich über die Wordpress Tags nur auf das persische datum zugreifen möchte und keine Datenbank abfrage. Da sich die Tabellen strukturen von Wordpress jeder Zeit ändern können. Ich schreibe das ganze in ein Template für Wordpress.

                Also:
                Heute ist Mittwoch, der 4. Februar 2009
                => Du arbeitest intern in der Datenbank mit diesem Datum
                => Du führst alle Rechenoperationen mit diesem Datum durch

                Erst bei der Ausgabe rechnest du um:
                Mittwoch, 4. Februar 2009
                in
                16. Bahman 1387

                Wenn Du 10 Tage von einem beliebigen Datum abziehen mußt, tust Du dies von Unixtime zu Unixtime. Das Ergebnis ist dann ein Unixtime-Datum, das Du für die Ausgabe wieder ins persische umrechnest.
                Durch das Plugin geben die WP Tags nur das Persische datum aus...
                EDIT:
                Aber in deinem letzten Post scheinst du ja schon eine Lösung zu haben.
                [/B]
                Leider nicht da die If anweisung immer true gibt egal was für ein Datum da ist.

                Kommentar


                • #9
                  Was enthalten die Variablen $datumminus10 und $postdaum?

                  Kommentar


                  • #10
                    $postdaum=the_time('Y-m-d');
                    Das ist, dass datum in dem der Beitrag geschrieben worden ist.(Im persischen Kalender)
                    und
                    $datumminus10 =jdate('Y-m-d',time()-864000)
                    Ist das heutige datum abzüglich von 10Tagen(60*60*24*10=864000) im Format JAHR-Monat-Tag


                    aber du hast mich mit dienem letzten Post auf ne idee gebracht. Vllt finde ich in dem Plugin eine Funktion die persische Zeit im Westliche Umwandelt und dann kann ich time() benutzen

                    Kommentar


                    • #11
                      Original geschrieben von somebody
                      im Format JAHR-Monat-Tag
                      Na dann ist es kein Wunder! Du kannst nur Timestamps mit PHP vergleichen. Alles andere gibt Quatschergebnisse.

                      aber du hast mich mit dienem letzten Post auf ne idee gebracht. Vllt finde ich in dem Plugin eine Funktion die persische Zeit im Westliche Umwandelt und dann kann ich time() benutzen
                      Würde ich auch empfehlen.

                      Kommentar


                      • #12
                        Du kannst ein
                        PHP-Code:
                        intval(str_replace("-"""jtime())) 
                        machen, dann hast du zwei integers die du vergleichen kannst, das sollte dann klappen.

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          Original geschrieben von pekka
                          Na dann ist es kein Wunder! Du kannst nur Timestamps mit PHP vergleichen. Alles andere gibt Quatschergebnisse.
                          Das stimmt so nicht ganz. Es geht auch so:

                          PHP-Code:
                          var_dump('2009-02-04' '2008-11-07');
                          // bool(true)

                          var_dump('2009-02-04' '2009-02-05');
                          // bool(false)

                          var_dump('2009-02-04' '2009-02-03');
                          // bool(true)

                          var_dump('2009-02-04' == '2009-02-04');
                          // bool(true) 

                          Kommentar


                          • #14
                            Original geschrieben von h3ll
                            Das stimmt so nicht ganz. Es geht auch so:

                            Klar, stimmt. Aber wie Ghostgambler schon sagt, sollten dann unbedingt die Bindestriche raus. Die können unberechenbares Verhalten erzeugen.

                            Kommentar


                            • #15
                              Original geschrieben von pekka
                              Klar, stimmt. Aber wie Ghostgambler schon sagt, sollten dann unbedingt die Bindestriche raus. Die können unberechenbares Verhalten erzeugen.
                              Nö. Welches denn?

                              Kommentar

                              Lädt...
                              X