Problem mit Datumslokalisierung in einem Plugin (date_i18n)

  • Jetzt habe ich noch eine Frage zur Ausgabe der Geburtstage des aktuellen Tages. Mir ist aufgefallen, dass diese auch noch eine gewisse Zeit des folgenden Tages angezeigt werden, und das auch noch mit falschem Datum, nämlich eben dem des Folgetages. Ich nehme mal an, dass der Fehler in folgender Funktion zu finden ist.

    Mit "INTERVAL 6 HOUR" und den Zahlen 1, 5, 6 und 10 kann ich hier nicht so viel anfangen.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Gehört hab ich davon auch noch nie, aber ich verlinke mal die ergoogelte Doku:
    http://dev.mysql.com/doc/refman/5.1…nction_date-add

    Wenn ich das richtig verstehe, holt die Anweisung das aktuelle Datum und zieht davon sechs Stunden ab. Substring(xxx, 1, 10) ist dann einfach das Rausholen des gewünschten Teiles des Ergebnisstrings, das wird schon stimmen. Aber was das soll, dass statt des aktuellen Datums das aktuelle Datum - 6 Stunden benutzt wird, kann ich Dir auch nicht sagen. Wo stammt der Code denn her? Vielleicht musst Du da mal den Autor fragen?!

    Ich bin ohnehin nicht sicher, was das soll. Verstehe ich das richtig, dass die SQL-Abfragen für $today und $todaymd nur dazu dienen, den Datumsstring zu erhalten? Das würde ich gleich mit PHP machen (date-Funktion?).

  • Ammaletu, vielen Dank für deine Antwort!

    Wo stammt der Code denn her? Vielleicht musst Du da mal den Autor fragen?!

    Der Code stammt aus dem Plugin 'Birthday List' von E. J. Knapp. Er ist leider nur ziemlich sporadisch ansprechbar. Da seine Website gerade "under construction" ist und sich das Plugin (vielleicht aus gutem Grund?) nicht im WordPress-Plugin-Verzeichnis befindet, habe ich es mal hochgeladen:[COLOR=Navy][/COLOR] [COLOR=Blue]Birthday List[/COLOR]. ~Link entfernt~

    Ich bin ohnehin nicht sicher, was das soll. Verstehe ich das richtig, dass die SQL-Abfragen für $today und $todaymd nur dazu dienen, den Datumsstring zu erhalten? Das würde ich gleich mit PHP machen (date-Funktion?).

    Das scheint tatsächlich so zu sein. :-?

    [edit]Gehe ich eigentlich recht in der Annahme, dass die Datenbank nur aktualisiert wird, wenn auch am Tag des Geburtstages das PHP-Skript aufgerufen wird?

    PHP
    // if there is a birthday today, update db
    if ($today[0] = $todaybirthday[0]) 
    { 
        $sql = "UPDATE $nbday_tablename SET age = age+1, birthday = DATE_ADD(bdate, INTERVAL age+1 YEAR), wdate = DATE_SUB(birthday, INTERVAL 7 DAY) WHERE birthday = '" . $todaybirthday[0] . "' "; 
        $wpdb->query($sql);    
    }

    [/edit]

    Einmal editiert, zuletzt von h-u-g-o (20. November 2009 um 15:12)

  • Zitat

    Gehe ich eigentlich recht in der Annahme, dass die Datenbank nur aktualisiert wird, wenn auch am Tag des Geburtstages das PHP-Skript aufgerufen wird?

    Kann sein, dass es so gedacht war, aber dann müsste dort "==" stehen statt "=". Aber ganz ehrlich, da blicke ich nicht wirklich durch, was da passiert. Wieso muss die DB denn aktualisiert werden? Steht da das Alter tatsächlich als Zahl in der DB? Das macht doch gar keinen Sinn!?!

  • Das mit dem Vergleich war mir noch gar nicht aufgefallen. So macht die if-Abfrage ja überhaupt keinen Sinn.

    Ich blicke da leider auch nicht durch. :(

    Ja, das Alter steht tatsächlich in der DB; vielleicht, um den Zugriff zu vereinfachen. :-?

    Außerdem wird aber auch das Datum des nächsten Geburtstages sowie das Datum, ab wann auf diesen Geburtstag hingewiesen werden soll (7 Tage im Voraus) aktualisiert.

    Kann denn grundsätzlich eine Aktualisierung überhaupt stattfinden, ohne dass ein Skript aufgerufen wird?

  • Zitat

    Kann denn grundsätzlich eine Aktualisierung überhaupt stattfinden, ohne dass ein Skript aufgerufen wird?

    Nein. Es muss so oder so eine PHP-Datei aufgerufen werden, sei es indem sich das per internem WP-Cron an einen Aufruf des Blogs hängt oder sei es einfach per cronjob.

    Die Architektur kommt mir suspekt vor. Keine Ahnung, für welche Situation das ursprünglich mal geschrieben wurde, aber es kann doch z.B. keinen nennenswerten Aufwand darstellen, das Alter durch simple Subtraktion von aktuellem Jahr minus Geburtsjahr auszurechnen. Sowas muss doch nicht redundant in der Datenbank stehen.

    Wenn Du Zeit und Spaß dran hast und sich der ursprüngliche Autor nicht mehr meldet, wäre es vermutlich das beste, Du würdest das sinnvoll weiterentwickeln und dann ins WP-Repository stellen. Dann haben auch mehr Leute eine Chance auf den Quelltext zu schauen und Fehler zu beheben.

  • Nein. Es muss so oder so eine PHP-Datei aufgerufen werden, sei es indem sich das per internem WP-Cron an einen Aufruf des Blogs hängt oder sei es einfach per cronjob.

    So etwas gibt es, einen internen WP-Cron?

    Die Architektur kommt mir suspekt vor. Keine Ahnung, für welche Situation das ursprünglich mal geschrieben wurde [...]

    Ich gehe schon davon aus, dass es tatsächlich für den Zweck geschrieben wurde, für den es jetzt auch zum Einsatz kommt.

    [...] aber es kann doch z.B. keinen nennenswerten Aufwand darstellen, das Alter durch simple Subtraktion von aktuellem Jahr minus Geburtsjahr auszurechnen. Sowas muss doch nicht redundant in der Datenbank stehen.

    Das stimmt schon. Na ja, ich wäre erst mal froh, wenn es korrekt laufen würde, also ein aktueller Geburstag auch wirklich nur an dem Tag selbst, und zwar von 00:00:00 Uhr bis 23:59:59 Uhr, angezeigt würde. Ich habe schon etwas herumgespielt, leider hat's nicht geklappt.

    Wenn Du Zeit und Spaß dran hast und sich der ursprüngliche Autor nicht mehr meldet, wäre es vermutlich das beste, Du würdest das sinnvoll weiterentwickeln und dann ins WP-Repository stellen. Dann haben auch mehr Leute eine Chance auf den Quelltext zu schauen und Fehler zu beheben.

    Dazu gehört ja nicht nur Zeit und Spaß, sondern auch die Fähigkeit. :roll: :mrgreen:

    Was meinst du denn genau mit WP-Repository?

  • Zitat

    So etwas gibt es, einen internen WP-Cron?

    Ja, siehe Codex:
    http://codex.wordpress.org/Function_Refer…_schedule_event

    Man kann damit Funktionen z.B. einmal täglich oder so laufen lassen, aber eben nur wenn das Blog auch regelmäßig aufgerufen wird.


    Zitat

    Ich gehe schon davon aus, dass es tatsächlich für den Zweck geschrieben wurde, für den es jetzt auch zum Einsatz kommt.

    Ich meinte mehr, ob es z.B. speziell für eine Seite mit sehr hohen Zugriffszahlen geschrieben wurde oder mit sehr vielen Mitgliedern. Wieso sonst sollte man sich z.B. die Berechnung des Alters sparen!? Aber ich vermute mal eher, dass der Autor sich besser mit SQL als mit PHP auskennt und das auch nicht besonders gut. ;-)


    Zitat

    Das stimmt schon. Na ja, ich wäre erst mal froh, wenn es korrekt laufen würde, also ein aktueller Geburstag auch wirklich nur an dem Tag selbst, und zwar von 00:00:00 Uhr bis 23:59:59 Uhr, angezeigt würde. Ich habe schon etwas herumgespielt, leider hat's nicht geklappt.

    Tja, ich nehme halt an, dass man das wirklich mal von grundauf überholen müsste. Der Impuls, das einfach selber zu machen, ist durchaus da, aber ich habe sowas von keine Freizeit, dass das eigentlich nur wieder als Desaster enden kann. :-/ Davon abgesehen müsste man dann schon wenigstens den ursprünglichen Autor fragen, was seine Pläne für das Plugin sind. Ich schaue gerade auf seiner Seite. Viel steht dazu nicht, aber zumindest sollte man ihn darüber kontaktieren können.
    http://www.ejknapp.com/blog/wordpress-plugins/birthday-list/


    Zitat

    Was meinst du denn genau mit WP-Repository?

    http://wordpress.org/extend/plugins/

  • Ja, siehe Codex:
    http://codex.wordpress.org/Function_Refer…_schedule_event

    Man kann damit Funktionen z.B. einmal täglich oder so laufen lassen, aber eben nur wenn das Blog auch regelmäßig aufgerufen wird.

    Danke sehr!

    Ich meinte mehr, ob es z.B. speziell für eine Seite mit sehr hohen Zugriffszahlen geschrieben wurde oder mit sehr vielen Mitgliedern. Wieso sonst sollte man sich z.B. die Berechnung des Alters sparen!? Aber ich vermute mal eher, dass der Autor sich besser mit SQL als mit PHP auskennt und das auch nicht besonders gut. ;-)

    Ach so. Ja, das ist gut möglich.

    Tja, ich nehme halt an, dass man das wirklich mal von grundauf überholen müsste. Der Impuls, das einfach selber zu machen, ist durchaus da, aber ich habe sowas von keine Freizeit, dass das eigentlich nur wieder als Desaster enden kann. :-/

    Oh, dann lass lieber erst mal die Finger davon, bevor du dich ins Unglück stürzt. :neutral:

    Davon abgesehen müsste man dann schon wenigstens den ursprünglichen Autor fragen, was seine Pläne für das Plugin sind.

    Du meinst, um nichts doppelt zu entwickeln?

    Ich schaue gerade auf seiner Seite. Viel steht dazu nicht, aber zumindest sollte man ihn darüber kontaktieren können.
    http://www.ejknapp.com/blog/wordpress-plugins/birthday-list/

    Zumindest ist die Seite wieder online. Kontaktiert habe ich den Autor bereits, aber wie gesagt, er antwortet nur sporadisch, wenn überhaupt. Das letzte Mal ist lang her.

    Ach so, alles klar. Danke!

  • Zitat

    Du meinst, um nichts doppelt zu entwickeln?

    Naja, auch aus Nettigkeit. Rechtlich gesehen müsste das Plugin unter der GPL stehen und man dürfte es also nach Belieben verändern und neu veröffentlichen, so lange man den Namen des ursprünglichen Autors dran lässt. Aber netter ist es schon, wenn man erstmal fragt, ob das dem Autor Recht ist. ;-) Und ja, könnte ja sein, dass er das Ding schon komplett umgeschrieben hat und kurz davor ist, eine neue Version zu veröffentlichen. Glaube ich jetzt nicht direkt, aber könnte ja sein.

  • Jetzt habe ich noch eine Frage zur Ausgabe der Geburtstage des aktuellen Tages. Mir ist aufgefallen, dass diese auch noch eine gewisse Zeit des folgenden Tages angezeigt werden, und das auch noch mit falschem Datum, nämlich eben dem des Folgetages. Ich nehme mal an, dass der Fehler in folgender Funktion zu finden ist.

    Mit "INTERVAL 6 HOUR" und den Zahlen 1, 5, 6 und 10 kann ich hier nicht so viel anfangen.

    Na ja, ich wäre erst mal froh, wenn es korrekt laufen würde, also ein aktueller Geburstag auch wirklich nur an dem Tag selbst, und zwar von 00:00:00 Uhr bis 23:59:59 Uhr, angezeigt würde. Ich habe schon etwas herumgespielt, leider hat's nicht geklappt.

    Hat da vielleicht mittlerweile jemand eine Idee zu? :neutral:

  • Deutsche Version von BirthdayList

    Mit dem Autor zusammen habe ich das PlugIn lokalisiert - wen's interessiert melde sich bitte hier oder an cschuster.79271.googlemail.com.

    Schönen Gruß
    Cinoa

  • falscher Tag (+1) am eigentlichen Gebrutstag

    Schon etwas her, aber falls jemand noch das Problem mit dem falschen Tag (+1) am eigentlichen Geburtstag hat: Wir sind bei einem Kunden auf das Plugin gestoßen und haben es wie folgt korrigiert. Der HTML-Code ist wohl nicht mehr original, aber die PHP-Snippets könnt ihr euch ja rausnehmen.

    Zeile 439-468, nbday.php

    PHP
    <?php        if (!empty($tdseven) )        {             ?>
                <?php            foreach ($tdseven as $row)                 {                $timestamp = strtotime($row->bwmd);                if (substr($row->birthday,5) == date('m-d')) {                    $timestamp = strtotime("-1 year", $timestamp);                }                ?>                        <span style="font-size: 11px; background-color: #D00F0A; margin: 0 0 0 15px; padding: 0 5px; color: white;"><?php echo strftime("%e. %B %Y", $timestamp) ?></span><br />                    <span style="font-size: 11px; font-weight: bold; margin: 0 0 0 15px; padding: 0 0; color: #666666;"><?php echo $row->first ?> <?php echo $row->last ?></span> <span style="font-size: 11px; margin: 0 0 0 15px; padding: 0 0; color: #666666;"><?php echo $row->age + 0, ' Jahre' ?></span><br />                    <?php            }            ?>
                <?php        }        else        {            ?>            <span style="font-size: 11px; font-weight: bold; margin: 0 0 0 15px; padding: 0 0; color: #666666;"><?php _e("Kein Geburtstag in den n&auml;chsten 7 Tagen.") ?></span><br />            <?php            }}

    Viele Grüße,
    Majo

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!