29.10.2009, 22:13
|
#1 (permalink)
| | PostRank: 6
Registriert seit: 23.11.2008
Beiträge: 665
| 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: PHP-Code:
// Prints out the current and upcoming birthdays function nbday_now() { global $nbday_tablename, $wpdb, $todaybmd; nbday_todaybd(); // get today's birthdays and birthdays 7 days in advance $sql = "SELECT first, last, bdate, birthday, age, sunsign, DATE_FORMAT(bdate, '%W, %M %D %Y') AS nbdate, DATE_FORMAT(birthday, '%W, %M %D %Y') AS bwmd, DATE_FORMAT(birthday, '%D') AS bday FROM $nbday_tablename WHERE SUBSTRING(DATE_SUB(NOW(), INTERVAL 6 HOUR),6,5) >= SUBSTRING(wdate,6,5) AND SUBSTRING(DATE_SUB(NOW(), INTERVAL 6 HOUR),6,5) <= SUBSTRING(birthday,6,5) ORDER BY bday ASC "; $tdseven = $wpdb->get_results($sql);
echo '<div><h3>'.__('Nächste Geburtstage', 'nbday').'</h3></div>';
?>
<?php if (!empty($tdseven) ) { ?> <table width="100%" cellpadding="2" cellspacing="1" border='0'> <?php foreach ($tdseven as $row) { ?> <tr> <?php if (substr($row->birthday,5,5) == $todaybmd[0]) { ?> <td align="left"><?php echo $row->first ?> <?php echo $row->last ?> is <?php echo $row->age, ' Today!!' ?></td> <td align="right" valign="bottom"><?php echo $row->sunsign ?></td> </tr> <?php } else { ?> <td align="center"><a href="http://www.wordpress.org/" title="Geburtstag: <?php echo date_i18n("j. F Y", strtotime($row->nbdate)) ?>"><?php echo $row->first ?> <?php echo $row->last ?> wird am <?php echo date_i18n("j. F Y", strtotime($row->bwmd)) ?> <?php echo $row->age + 1 ?> Jahre alt.</a></td> <?php } ?> </tr> <?php } ?> </table> <?php } else { ?> <p><?php _e("You're Safe - No Birthdays coming up.") ?></p> <?php } } Das vollständige angepasste Plugin gibt's hier. ~Link entfernt~
Würde mich über Hilfe sehr freuen, hat mich schon viel Nerven gekostet...
Liebe Grüße
Hugo
PS:
Wenn ich anstatt PHP-Code:
title="Geburtstag: <?php echo date_i18n("j. F Y", strtotime($row->nbdate)) ?>" schreibe: PHP-Code:
title="Geburtstag: <?php echo $row->nbdate ?>" dann wird das korrekte Datum ausgegeben, nur halt nicht so formatiert, wie ich's gern hätte.
Geändert von h-u-g-o (20.11.2009 um 15:14 Uhr).
|
| |
30.10.2009, 12:16
|
#2 (permalink)
| | WPD-Moderator
Registriert seit: 14.07.2007 Ort: Bonn
Beiträge: 4.379
| Hm, interessantes Problem. Auf Anhieb sehe ich da leider auch keinen Fehler. Was spuckt denn strtotime($row->nbdate) aus?! Vielleicht ist das ja schon falsch? Ich würde vermuten, dass 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? |
| |
30.10.2009, 13:53
|
#3 (permalink)
| | PostRank: 6
Registriert seit: 23.11.2008
Beiträge: 665
| Vielen Dank für deine Antwort, Ammaletu! PHP-Code: <?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, $row->bdate ist ein Timestamp, genauer vom Typ date. Damit direkt zu arbeiten hatte ich auch schon versucht. Das führt zu folgenden Ergebnissen: PHP-Code: <?php echo $row->bdate ?> -> Zitat: |
title="Geburtstag: 1938-11-03"
| Hier ist das Datum noch richtig.
--- PHP-Code: <?php echo strtotime($row->bdate) ?> -> Zitat: |
title="Geburtstag: -983404800"
| --- PHP-Code: <?php echo date_i18n("j. F Y", $row->bdate) ?> -> Zitat: |
title="Geburtstag: 1. Januar 1970"
| --- PHP-Code: <?php echo date_i18n("j. F Y", strtotime($row->bdate)) ?> -> Zitat: |
title="Geburtstag: 30. Oktober 2009"
| 
Geändert von h-u-g-o (30.10.2009 um 14:18 Uhr).
|
| |
30.10.2009, 15:15
|
#4 (permalink)
| | PostRank: 3
Registriert seit: 07.05.2009
Beiträge: 102
| 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 ?> <?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
Geändert von cinoa (30.10.2009 um 15:16 Uhr).
Grund: Überarbeitung
|
| |
30.10.2009, 15:22
|
#5 (permalink)
| | PostRank: 6
Registriert seit: 23.11.2008
Beiträge: 665
| 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]
Geändert von h-u-g-o (30.10.2009 um 15:29 Uhr).
|
| |
30.10.2009, 15:30
|
#6 (permalink)
| | PostRank: 3
Registriert seit: 07.05.2009
Beiträge: 102
| sorry, habe ich was missverstanden! |
| |
30.10.2009, 15:39
|
#7 (permalink)
| | PostRank: 6
Registriert seit: 23.11.2008
Beiträge: 665
| So, probier's mal damit:
Zeile 454: PHP-Code:
<td align="left"><?php echo $row->first ?> <?php echo $row->last ?> is <?php echo $row->age, ' Today!!' ?></td> ersetzen durch: PHP-Code:
<td align="left"><?php echo $row->first ?> <?php echo $row->last ?> feiert heute den <?php echo $row->age ?>. Geburtstag!</td> Zeile 455 löschen. (Sternzeichen)
Zeile 458: PHP-Code:
<td align="left"><?php echo $row->first ?> <?php echo $row->last ?> will be <?php echo $row->age + 1, ' on' ?><br /><?php echo $row->bwmd ?></td> ersetzen durch: PHP-Code:
<td align="left"><?php echo $row->first ?> <?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-Code:
<td align="left"><?php echo $row->first ?> <?php echo $row->last ?> is <?php echo $row->age, ' Today!!' ?></td> ersetzen durch: PHP-Code:
<td align="left"><?php echo $row->first ?> <?php echo $row->last ?> feiert heute den <?php echo $row->age ?>. Geburtstag!</td> Zeile 509 löschen. (Sternzeichen)
Zeile 512: PHP-Code:
<td align="left"><?php echo $row->first ?> <?php echo $row->last ?> will be <?php echo $row->age + 1, ' on' ?><br /><?php echo $row->nbirthday ?></td> ersetzen durch: PHP-Code:
<td align="left"><?php echo $row->first ?> <?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?
Geändert von h-u-g-o (30.10.2009 um 16:15 Uhr).
|
| |
30.10.2009, 15:42
|
#8 (permalink)
| | PostRank: 6
Registriert seit: 23.11.2008
Beiträge: 665
| 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? |
| |
30.10.2009, 15:45
|
#9 (permalink)
| | PostRank: 3
Registriert seit: 07.05.2009
Beiträge: 102
| 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 ...?! |
| |
30.10.2009, 15:49
|
#10 (permalink)
| | PostRank: 3
Registriert seit: 07.05.2009
Beiträge: 102
| 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. |
| | | Themen-Optionen | | | | Ansicht | Linear-Darstellung |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr. | |