Problem mit Datumslokalisierung in einem Plugin (date_i18n)

  • Hallo,

    ich verzweifle langsam. Ich kann mir einfach nicht erklären, warum an einer Stelle anstatt des korrekten Datums immer das des aktuellen Tages ausgegeben wird. Schaut euch das bitte mal an: ~Link entfernt~ (siehe Footer!)

    Der Geburtstag wird korrekt ausgegeben:

    Zitat

    Horst Schimanski wird am 3. November 2009 71 Jahre alt.

    Im Tooltip soll das Geburtsdatum ( 3. November 1938 ) stehen, aber sobald ich date_i18n benutze, wird immer das Datum des aktuellen Tages angezeigt.

    Zitat

    Geburtstag: 29. Oktober 2009

    Der relevante Code:

    Das vollständige angepasste Plugin gibt's [COLOR=Blue]hier[/COLOR]. ~Link entfernt~

    Würde mich über Hilfe sehr freuen, hat mich schon viel Nerven gekostet...

    Liebe Grüße
    Hugo

    PS:

    Wenn ich anstatt

    PHP
    title="Geburtstag: <?php echo date_i18n("j. F Y", strtotime($row->nbdate)) ?>"

    schreibe:

    PHP
    title="Geburtstag: <?php echo $row->nbdate ?>"

    dann wird das korrekte Datum ausgegeben, nur halt nicht so formatiert, wie ich's gern hätte.

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

    • 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

  • [COLOR=Black]Hm, interessantes Problem. Auf Anhieb sehe ich da leider auch keinen Fehler. Was spuckt denn [/COLOR][COLOR=Black]strtotime($row->nbdate) aus?! Vielleicht ist das ja schon falsch? Ich würde vermuten, dass [/COLOR][COLOR=Black]date_i18n das aktuelle Datum nimmt, falls es keinen verwertbaren Input bekommt. Und könntest Du nicht gleich mit $row->bdate arbeiten, das ist doch ein Timestamp, oder?
    [/COLOR]

  • Vielen Dank für deine Antwort, Ammaletu!

    PHP
    <?php echo strtotime($row->nbdate) ?>

    führt zu folgender Ausgabe:

    Zitat

    title="Geburtstag: -983404800"

    Du liegst mit deiner Vermutung also offenbar richtig und da liegt der Hund begraben.

    Ja, [COLOR=Black]$row->bdate ist ein Timestamp, genauer vom Typ date. Damit direkt zu arbeiten hatte ich auch schon versucht. Das führt zu folgenden Ergebnissen:

    [/COLOR]

    PHP
    <?php echo $row->bdate ?>

    ->

    Zitat

    title="Geburtstag: 1938-11-03"

    Hier ist das Datum noch richtig.

    ---

    PHP
    <?php echo strtotime($row->bdate) ?>

    ->

    Zitat

    title="Geburtstag: -983404800"

    ---

    PHP
    <?php echo date_i18n("j. F Y", $row->bdate) ?>

    ->

    Zitat

    title="Geburtstag: 1. Januar 1970"

    ---

    PHP
    <?php echo date_i18n("j. F Y", strtotime($row->bdate)) ?>

    ->

    Zitat

    title="Geburtstag: 30. Oktober 2009"

    :cry:

    Einmal editiert, zuletzt von h-u-g-o (30. Oktober 2009 um 14:18)

  • Hi, sehr schönes PlugIn - und für eine geschlossene kleine Schulcommunity eine tolle Sache - Kompliment!!!

    Habe ich seit gerade auf unserm Schulblog installiert.

    Könntest du mir den Code für folgendes Format in der sidebar übermitteln: (Vorname, Name) feiert am 2. November 2009 seinen 12. Geburtstag

    Habe Verschiedes probiert mit deinem Code in

    Line 458:

    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> wird <?php echo $row->age + 1, ' am' ?><br /><?php echo $row->bwmd ?></td>

    Ich vermute jedenfalls, dass das die Stelle ist, oder?

    Sehr dankbar dafür ist cinoa

    Einmal editiert, zuletzt von cinoa (30. Oktober 2009 um 15:16)

  • Das Plugin ist nicht von mir, sondern von Edward Knapp. Ich schau's mir mal an.

    [edit]Eigentlich gehört das ja nicht in diesen Thread.

    Wenn der Text wirklich so aussehen soll, dann müsste man zusätzlich eine Unterscheidung nach Geschlecht vornehmen, denn bei einem Mädchen/einer Frau soll ja dann "[...] ihren ... Geburtstag" ausgegeben werden.[/edit]

    Einmal editiert, zuletzt von h-u-g-o (30. Oktober 2009 um 15:29)

  • So, probier's mal damit:

    Zeile 454:

    PHP
    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> is <?php echo $row->age, ' Today!!' ?></td>

    ersetzen durch:

    PHP
    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> feiert heute den <?php echo $row->age ?>. Geburtstag!</td>

    Zeile 455 löschen. (Sternzeichen)

    Zeile 458:

    PHP
    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> will be <?php echo $row->age + 1, ' on' ?><br /><?php echo $row->bwmd ?></td>

    ersetzen durch:

    PHP
    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> feiert am <?php echo date_i18n("j. F Y", strtotime($row->bwmd)) ?> den <?php echo $row->age + 1 ?>. Geburtstag.</td>

    Zeile 459 löschen (Sternzeichen)

    ---

    Falls du nicht die Ausgabe für die nächsten 7 Tage benutzt, sondern die für den aktuellen Monat, musst du stattdessen folgende Änderungen vornehmen:

    Zeile 508:

    PHP
    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> is <?php echo $row->age, ' Today!!' ?></td>

    ersetzen durch:

    PHP
    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> feiert heute den <?php echo $row->age ?>. Geburtstag!</td>

    Zeile 509 löschen. (Sternzeichen)

    Zeile 512:

    PHP
    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> will be <?php echo $row->age + 1, ' on' ?><br /><?php echo $row->nbirthday ?></td>

    ersetzen durch:

    PHP
    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> feiert am <?php echo date_i18n("j. F Y", strtotime($row->bwmd)) ?> den <?php echo $row->age + 1 ?>. Geburtstag.</td>

    Zeile 513 löschen. (Sternzeichen)

    Klappt's?

    Einmal editiert, zuletzt von h-u-g-o (30. Oktober 2009 um 16:15)

  • Falls also tatsächlich "seinen" und "ihren" ausgegeben werden soll, müsste man die Tabelle in der Datenbank um eine Spalte ergänzen, in der das Geschlecht gespeichert wird. Dazu bräuchte es dann noch eine kleine Abfrage im Plugin. Ist das unbedingt gewünscht? Oder ist es auch geschlechtsneutral in Ordnung, so wie ich es jetzt vorgeschlagen habe?

  • wieder nicht zu fassen dieses forum - ihr seit alle einfach zum knutschen - jedenfalls probier ich das und melde mich, okay?!

    Thanks dude!!

    PS Ob ich das je zurück geben kann als Nichtprogrammierer - und, sag, bekommt ihr eigentlich außer Lobeshymnen auch was anderes für eure Arbeit - es sind ja irgendwie immer dieselben - oder täuscht das ...?!

  • stimmt . habe ich gar nicht bedacht, shit - "den" tuts auch - das heißt also geschlechtsneutrale Lösung - sonst ufert das ja aus - mach ich eh alles für die Schule für lau - jedenfalls werde ich eure Hilfe zu gegebener Zeit hervorheben. Ich übernehme deinen Code so wie beschrieben und melde mich dann in jedem Fall.

  • Hallo Cinoa,

    also ich nehme in den meisten Fällen selbst die geballte Kompetenz dieses Forums in Anspruch und bin froh, wenn ich dann auch mal ab und zu eine kleine Hilfe sein kann.

    Ich hoffe, dass das so klappt, ansonsten melde dich einfach noch mal.

    Liebe Grüße
    Hugo

  • Mit Deinem code hats nicht geklappt, aber hiermit:

    <td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> feiert am <?php echo $row->bwmd ?> den <?php echo $row->age + 1,'. Geburtstag' ?></td>

    jetzt muss ich nur noch das Datumsformat hinbekommen - das ist wohl eine etwas heiklere Sache, aber vielleicht muss ich nur einfach alle Passagen ändern, in denen das Format vorkommt, oder ?!

    Danke anyway , ich hab dem Autor eine Mail geschickt, mal sehen was er sagt. Soll ich dich informieren, oder ist dir das nciht so wichtig?

  • Nimm doch noch mal meinen Code, ich hatte wirklich nur zwei Klammern vergessen! Dann hast du auch das gewünschte Datumsformat!

    Ja, kannst mir gern informieren, falls du Antwort erhälst.

  • sehr gerne, promise!

    Schönen Tag noch wo immer du jetzt sitzt - draußen ist goldenes Licht

    PS Habe das Format jetzt hinbekommen:

    <td align="left"> <?php echo $row->first ?>&nbsp;<?php echo $row->last ?><br/> <?php echo date_i18n("j. F Y", strtotime($row->bwmd)) ?><br/><?php echo $row->age + 1,'. Geburtstag' ?></td>

    Kleine Liste - kurz und knapp und sehr funktional - prima Lösung - dies Ding generiert auch noch das Alter - toll

    Einmal editiert, zuletzt von cinoa (30. Oktober 2009 um 17:02)

  • Danke!

    Prima. Anstatt des Aufzählungszeichens solltest du aber vielleicht besser mit Listen arbeiten, also mit <ul><li></li></ul>. Das Alter wurde ja schon von Anfang an generiert.

    Danke, dir auch noch einen schönen Tag!

  • Ok, um dann mal zum eigentlichen Thread zurückzukommen: Soweit ich das gerade gelesen habe, sollten Timestamps zwischen 1901 und 2038 kein Problem sein, auf Windows-Maschinen geht aber wohl nur ab 1970 (bis PHP 5.1.0). Das Problem ist hier denke ich die WordPress-Funktion (Ja, habe gerade mal nachgeschaut -- alle negativen Timestamps, also alles vor 1970, wird fest auf das aktuelle Datum gesetzt), die man dann eventuell durch eine andere Funktion ersetzen müsste.

    Hm, strftime würde gehen, aber dann müsste die Locale des PHP-Prozesses komplett verstellt werden, was vermutlich nicht gehen wird. Was Du machen kannst, ist entweder die date_i18n-Funktion in die functions.php zu kopieren und dort anzupassen (aus wp-includes/funcstions.php kopieren, in der functions.php mit anderem Namen einfügen und den if-Block am Anfang entfernen, bei mir Zeile 90-98). Oder Du lässt Dir in der SQL-Query das Datum sinnvoll formatiert ausgeben und ersetzt den Monat dort mit einer Helperfunktion durch den Monatsnamen in Deutsch.

Jetzt mitmachen!

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