SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 04.11.2014, 23:23:49
marcuszurhorst marcuszurhorst ist offline
Anfänger
 
Registriert seit: Apr 2014
Ort: Mülheim an der Ruhr
Alter: 45
Beiträge: 12
Frage zu Datumsumwandlungen

Hallo zusammen!

Ich habe hier ein kleines WordPress Plugin, welches per Button aufgerufen wird.
Dieses Skript soll einen RSS-Feed einlesen und dann sämtliche Feed-Einträge, welche seit dem vergangenen Skript-Aufruf hinzu kamen, in eine Liste schreiben.

Mein Problem ist, dass dieses Skript etliche Monate hervoragend funktionierte, und nun plötzlich nicht mehr. Es werden keine Listen mehr erstellt.

Um die Funktion des Skripts zu verstehen, habe ich mir Debug-Ausgaben eingebaut.
Soweit ich nun sehen kann, funktioniert ein verschachtelter Datumsvergleich nicht.

Das vollständige Skript habe ich ans Ende gestellt. Momentan geht es mir um den Teil mit dem Datum:
PHP-Code:
$pubDate strtotime(date('d.m.Y',strtotime($item->pubDate)));
echo 
"DEBUG: Variable \$item->pubDate = " $item->pubDate "<br>"
Das ist derart ineinander verschachtelt, dass ich den Überblick verliere.
Ich habe es daher in verschiedene Teil-Abschnitte zerlegt:
PHP-Code:
$stringfromfeed "Wed, 29 Okt 2014 17:08:16 EDT ";
echo 
"DEBUG: Variable \$stringfromfeed = " $stringfromfeed "<br>";
$testdate strtotime($stringfromfeed);
echo 
"DEBUG: Variable \$testdate = " $testdate "<br>";   // liefert immer 0 ??
$teststring2 date('d.m.Y',$testdate);
echo 
"DEBUG: Variable \$teststring2 = " $teststring2 "<br>";
$testdate2 strtotime($teststring2);
echo 
"DEBUG: Variable \$testdate2 = " $testdate2 "<br>"
Der String "Wed, 29 Okt 2014 17:08:16 EDT " ist direkt aus dem Quelltext meines RSS-Feeds und wird auch durch die Debug-Ausgabe im oberen PHP-Listing bestätigt.

Aber bereits in der Variablen $testdate steht dann eine Null ("0") drin.
Ich vermute, dass genau das der Fehler ist, denn bei den nachfolgenden Vergleichen sind damit sämtliche Feedeinträge kleiner (bzw. älter) als das Datum des letzten Skriptlaufs.


Kann mir bitte jemand erklären, was der Autor dieses Skripts mit den ineinander geschachtelten Datumsumwandlungen bezwecken wollte? -- Mir ist das nicht ganz klar.


Großes Dankeschön für einen guten Tipp!

Viele Grüße,
Marcus


PS: hier noch der Link zum Feed: http://www.die-zurhorsts.de/genealogie/tngrss.php


Komplettes Skript:

PHP-Code:
    <?php
    
if($_POST['tng_rss'] == 'true') {
        if( !
$xml simplexml_load_file(TNG_RSS_FEED_URL) ) {
            echo 
'Could not read RSS file!';
        }
        
$last_update intval(get_option('tng_rss_last_update','0'));
        echo 
"DEBUG: Variable \$last_update = " $last_update " (aus Datenbank gelesen)<br>";

        
$stringfromfeed "Wed, 29 Okt 2014 17:08:16 EDT ";
        echo 
"DEBUG: Variable \$stringfromfeed = " $stringfromfeed "<br>";
        
$testdate strtotime($stringfromfeed);
        echo 
"DEBUG: Variable \$testdate = " $testdate "<br>";   // liefert immer 0 ??
        
$teststring2 date('d.m.Y',$testdate);
        echo 
"DEBUG: Variable \$teststring2 = " $teststring2 "<br>";
        
$testdate2 strtotime($teststring2);
        echo 
"DEBUG: Variable \$testdate2 = " $testdate2 "<br>";

        
$items = array();

        foreach(
$xml->channel[0]->item as $item) {
            
$pubDate strtotime(date('d.m.Y',strtotime($item->pubDate)));
        echo 
"DEBUG: Variable \$item->pubDate = " $item->pubDate "<br>";

            if(
$pubDate <= $last_update)
                break;
            
$items[strtotime(date('d.m.Y',$pubDate))][] = $item;
        }
        
$postcount 0;

        foreach(
$items as $date => $date_items) {

            if(
$date $last_update) {
                
$last_update $date;
            }

            
$content '<ul>';
            
$strdate date('l, d. F Y'$date);
            foreach(
$date_items as $item) {
                
$title preg_replace("#\([^\)]*\)#"""$item->title);
                
$content .= '<li>';
                
$content .= '<a href="'.$item->link.'" target="_blank">'.$title.'</a> - '.$item->description;
                
$content .= '</li>';
            }
            
$content .= '</ul>';

            
$title 'TNG Updates vom '.date('d.m.Y',$date);
            
$post wp_insert_post(array(
                
'post_content' => $content,
                
'post_title' => $title,
                
'post_status' => 'draft',
                
'post_category' => explode(',',TNG_RSS_CATEGORY),
                
'tags_input' => explode(',',TNG_RSS_TAGS),
                
'post_author' => TNG_RSS_AUTHOR,
                
'post_date' => date('Y-m-d H:i:s',$date)
            ));

            if(
$post 0) {
        
set_post_thumbnail$postTNG_RSS_FEATUREDIMAGE );
                
$postcount++;
            }
            else {
                echo 
'Artikel '.$title.' konnte nicht erstellt werden.';
            }
        }
    echo 
'DEBUG: ' $last_update.' wird als neues Datum in die Datenbank geschrieben.';
        
update_option('tng_rss_last_update',$last_update);

        echo 
$postcount.' Artikel hinzugefügt.';

    }
}
?>

Geändert von marcuszurhorst (04.11.2014 um 23:27:10 Uhr) Grund: URL zum RSS-Feed eingefügt
Mit Zitat antworten
  #2  
Alt 06.11.2014, 14:38:38
Benutzerbild von Domi
Domi Domi ist offline
Senior Member
 
Registriert seit: Nov 2003
Ort: Kempten @ Allgäu
Alter: 36
Beiträge: 1.408
AW: Frage zu Datumsumwandlungen

Hi,

strtotime() akzeptiert nur bestimmte Formate, siehe hier: http://php.net/strtotime bzw http://php.net/manual/en/datetime.formats.php

du müsstest jetzt im Detail schauen, ob das Datumsformat wie es kommt auch akzeptiert wird. Oder dies vorab nochmal manipulieren bevor du es an strtotime() übergibst. Dies könntest du z.b. mit einfach Stringfunktionen zum Testen machen.

.. das wäre der erste Ansatz wenn Dein strtotime() wirklich immer 0 zurück gibt.

Hoffe das hilft Dir weiter.

Domi
__________________

the best way to be ready for the future is to invent it
Mit Zitat antworten
  #3  
Alt 06.11.2014, 19:57:30
marcuszurhorst marcuszurhorst ist offline
Anfänger
 
Registriert seit: Apr 2014
Ort: Mülheim an der Ruhr
Alter: 45
Beiträge: 12
AW: Frage zu Datumsumwandlungen

Hallo Domi,

das muss ich mir genauer anschauen.
Allerdings bin ich inzwischen selbst drauf gekommen, was dieses ganze hin und her wohl erreichen soll.

Ich vermute:
1) Das Quell-XML des RSS-Feeds enthält einen String, der eine Zeitinformation beinhaltet. Und zwar wie im Beispiel zu sehen inklusive Uhrzeit, Zeitzone etc.
2) strtotime() macht eine UNIX-Zeit daraus.
3) date() schreibt das wieder zurück in einen String, aber nur noch als Datum
4) dann das zweite strtotime(), um daraus nun einen UNIX-Zeitstempel für dieses Datum (bei 00:00:00 Uhr) zu bekommen.

Das hat zur Folge, dass alle diejenigen Einträge im Feed, die zu unterschiedlichen Uhrzeiten des gleichen Tags geschrieben sind, nun allesamt den identischen UNIX-Zeitstempel bekommen.
Und diese landen alle in der Liste des WordPress-Artikels.

Feed-Einträge eines anderen Tags haben einen anderen Zeitstempel und werden in einem anderen WordPress-Artikel zusammen gesammelt.


Soweit ich das PHP Handbuch verstehe, handelt es sich nicht um ein gültiges Format.
Ich sehe auch folgende Merkwürdigkeiten:
1) "Wed" und "Okt" (eins Englisch, eins Deutsch abgekürzt)
2) Leerzeichen am Ende (vermutlich egal)
3) EDT ist die Sommerzeit an der US-Ostküste. Der Server läuft aber in Deutschland.

Danke & Gruß,
Marcus
Mit Zitat antworten
Antwort

Stichworte
datumswerte, strtotime


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zur Verknüpfung v. Tabellen in SELECT und Datenbankstruktur mrweasel MySQLi/PDO/(MySQL) 8 05.05.2008 20:54:19
rechtliche frage an die selbständigen profis hier sysop Off Topic Area 3 07.04.2008 23:21:10
Frage bzw. Idee zum Captcha Thema pixelsetzer PHP Grundlagen 5 26.01.2008 22:53:44
Eine kurze Frage zu Session phelios PHP Grundlagen 12 15.12.2007 01:31:48
Upload Script Frage! ZeroxXx PHP Grundlagen 35 13.07.2006 23:13:18


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:24:39 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt