Zurück   WordPress Deutschland Forum > Support > Plugins und Widgets

Antwort
 
Themen-Optionen Ansicht
Alt 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&auml;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 ?>&nbsp;<?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 ?>&nbsp;<?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).
h-u-g-o ist offline   Mit Zitat antworten
Alt 30.10.2009, 12:16   #2 (permalink)
WPD-Moderator
 
Benutzerbild von Ammaletu
 
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?
__________________
Mein Blog || Code-Notizen || Schon in die FAQ geschaut?
Ammaletu ist offline   Mit Zitat antworten
Alt 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).
h-u-g-o ist offline   Mit Zitat antworten
Alt 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 ?>&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

Geändert von cinoa (30.10.2009 um 15:16 Uhr). Grund: Überarbeitung
cinoa ist offline   Mit Zitat antworten
Alt 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).
h-u-g-o ist offline   Mit Zitat antworten
Alt 30.10.2009, 15:30   #6 (permalink)
PostRank: 3
 
Registriert seit: 07.05.2009
Beiträge: 102
sorry, habe ich was missverstanden!
cinoa ist offline   Mit Zitat antworten
Alt 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 ?>&nbsp;<?php echo $row->last ?> is <?php echo $row->age' Today!!' ?></td>
ersetzen durch:

PHP-Code:
<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-Code:
<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-Code:
<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-Code:
<td align="left"><?php echo $row->first ?>&nbsp;<?php echo $row->last ?> is <?php echo $row->age' Today!!' ?></td>
ersetzen durch:

PHP-Code:
<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-Code:
<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-Code:
<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?

Geändert von h-u-g-o (30.10.2009 um 16:15 Uhr).
h-u-g-o ist offline   Mit Zitat antworten
Alt 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?
h-u-g-o ist offline   Mit Zitat antworten
Alt 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 ...?!
cinoa ist offline   Mit Zitat antworten
Alt 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.
cinoa ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.6.0 | Impressum | Ein Inpsyde.com Projekt