Portal > Foren > PHP > PEAR, PECL und Frameworks > Probleme mit date() bzw. Pear_Date
Antwort
 
Themen-Optionen
Alt 07.01.2006, 09:57 Nach oben    #1
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard Probleme mit date() bzw. Pear_Date

Hallo zusammen,

ich hab da mal so ein kleines Problem mit date. Ich hab mir gestern eine function gebaut, die mir die Zeitspanne zwischen einem gegebenen Timestamp und der aktuellen Zeit ermitteln soll. Dies soll dann in der Form "vor x Tagen, y Stunden, z Minuten" erfolgen.

Ich nutze dafür PEAR_Date bzw. Date_Span

PHP-Code:
function calc_timediff($timestamp) {

    require_once(
'Date.php');

    
$date = array();
    
    
$date[1] = new Date();
    
$date[2] = new Date($timestamp);
  
    
$span = new Date_Span($date[1],$date[2]);                

    unset(
$date);    

    
$timephrase "";

    
$timephrase .= $span->day == $span->day " Tag, " "";
    
$timephrase .= $span->day $span->day " Tagen, " "";
    
$timephrase .= $span->hour == $span->hour " Stunde, " "";
    
$timephrase .= $span->hour $span->hour " Stunden, " "";
    
$timephrase .= $span->minute == $span->minute " Minute" "";
    
$timephrase .= $span->minute $span->minute " Minuten" "";
    
$timephrase .= $span->minute == "kurzem" "";
    
    return 
$timephrase;
    

Prinzipiell funktioniert das ganze auch. Das Problem ist nur, dass wenn ich diese Funktion nun in einer Schleife auf einer Reihe von Timestamps anwende, der aktuelle Timestamp beim ersten durchlauf mit einer Zeit die der aktuellen Zeit minus einer Stunde entspricht (das liegt wohl an der Zeitzone - hier geht PEAR_Date von UTC aus), beim zweiten Durchlauf dann allerdings schon aktuelle Zeit minus 2 Stunden.

Dadurch sind natürlich die ganze Zeitangaben falsch. Ich hab leider auch überhaupt keinen plan warum das so ist. Den unset() hab ich da mal eingebaut weil ich da den Fehler vermutet hab - hat allerdings auch nichts geändert...

Wenn jemand eine bessere Lösung für das Problem kennt: ruhig her damit. Den Fehler hier würde ich aber trotzdem gerne lösen

P.S.: Bitte nicht wegen dem Code-Stil schimpfen... ich bin noch blutiger Anfäger

EDIT: Mir fällt gerade noch ein, dass ich für das erste "new Date()" auch schon versucht habe über die normale Date-Funktion von php einen Timestamp einzuschleusen, um einen Fehler im PEAR-Paket auszuschliessen... hat zu selbigem Ergebnis geführt.

Geändert von lokari (07.01.2006 um 09:59 Uhr).
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 10:16 Nach oben    #2
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

ich würde da nicht mit einer Klasse arbeiten...

ich würde das ggf. ein wenig umständlich gestalten, aber dafür selber.

wie auch deine Funktion würde ich eine Funktion programmieren, die den zu berechnenen timestamp übergibt
PHP-Code:
<?php
function calc_timediff($timestamp)

  
// ...
  
RETURN $diff;
}
?>
Die Differenz bilden:
PHP-Code:
<?php
function calc_timediff($timestamp)

  
$diff abs($timestamp-time());
  
// ..
  
RETURN $diff;
}
?>

Nun ist die Differenz in Sekunden verfügbar.


mit dem Tutorial: http://forum.developers-guide.net/showthread.php?t=78
müßte man nun nur noch das umrechnen gestalten.


Kriegst du das selbst hin? Sonst will ich dir dabei wohl auch helfen.




btw: ich will nicht behaupten, dass mein Ansatz besser wäre!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 10:28 Nach oben    #3
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard

Hallo Jann,

danke für Deine Tipps.

Warscheinlich wird mir gar nichts anderes übrig bleiben, da die Date-Klasse von Pear wohl noch einige Bugs hat.

z.B. wird hier

PHP-Code:
    $dateone->setTZbyID("UTC");
    
$datetwo->setTZbyID("UTC");  
  
    
$dateone->convertTZbyID("Europe/Berlin");
    
$datetwo->convertTZbyID("Europe/Berlin");    
  
    
$span = new Date_Span($dateone,$datetwo); 
bei einem dump vor dem Date_Span die Zeit mit den richtigen Zeitzonen ausgegeben. Nach dem Date_Span ist sie wieder UTC.

Ein eigener Ansatz wäre evtl. nicht verkehrt, das Problem ist nur, dass ich vermute, dass das mein Problem nicht löst.

Ich werde das aber eben mal prüfen.
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 10:39 Nach oben    #4
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard

ok, ich hab das nochmal getestet - es liegt wohl leider doch PEAR_Date... schade eigentlich, da die Klasse sonst tolle Funktionen mitbringt und gerade für das Problem hier ja eigentlich was brauchbares anbietet.

@Jann: Wegen dem Tutorial.. leider hab' ich grad gar keinen Plan wie mir das Tutorial bei dem Problem weiter helfen soll
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 11:04 Nach oben    #5
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

ich bin gerade knapp an Zeit, werde dir aber noch heute die Funktion fertig schreiben!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 11:05 Nach oben    #6
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard

das ist sehr nett von Dir - DANKE!
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 12:12 Nach oben    #7
Jay
Gast
 
Beiträge: n/a
Standard

@lokari
Bug melden! Sieh zuerst nach ob diesen Bug schon jemand gemeldet hat und wenn nicht bitte melden.
http://pear.php.net/package/Date
Danke!

Mfg Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 13:09 Nach oben    #8
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum. Bitte beim nächsten Mal darauf achten..

verschoben
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 13:11 Nach oben    #9
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard

naja mittlerweile hat er mit PEAR eigentlich nicht mehr direkt zu tun...

aber hast ja Recht *gelobebesserung*
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 13:28 Nach oben    #10
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

so, ich habe das mal gerade gemacht:
PHP-Code:
<?php
  error_reporting
(E_ALL);

  
/* Autor: Jann Hendrik Bekaan */

  
function calc_timediff($timestamp)
  {
    
// Wert überprüfen:
    
if(!is_int($timestamp))
      RETURN 
FALSE;

    
// Betrag der Differenz bilden:
    
$diff abs($timestamp-time());

    
// Ein Tag hat 60*60*24 = 86400 Sekunden
    
$tage floor($diff/86400);
    
// nun interessieren nur ganze Tage, daher die Funktion floor()

    // für die Ausgabe:
    
$return $tage.' Tag'.(($tage != 1)?'e':'').', ';

    
// nun die verbleibene Zeit (Std)
    
$rest $diff%86400;

    
$stunden floor($rest/3600);
    
$return .= $stunden.' Stunde'.(($stunden != 1)?'n':'').', ';

    
// nun die verbleibene Zeit (Min)
    
$rest $rest%3600;

    
$minuten floor($rest/60);
    
$return .= $minuten.' Minute'.(($minuten != 1)?'n':'').', ';

    
// nun die verbleibene Zeit (Sek)
    
$sekunden $rest%60;
    
$return .= $sekunden.' Sekunde'.(($sekunden != 1)?'n':'');

    RETURN 
$return;
  }

  echo 
calc_timediff(123454423);
?>
wichtige Funktionen dazu nachschlagen:
error_reporting()
is_int()
abs()
time()
floor()
ternärer Operator

zum Modulo habe ich gerade keinen link....



geh das mal durch, wenn du dazu Fragen hast, dann werde ich mich bemühen, diese zu beantworten!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 13:36 Nach oben    #11
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Zitat:
Zitat von Jann Hendrik
zum Modulo habe ich gerade keinen link...
Tztztz
http://forum.developers-guide.net/showthread.php?t=2499
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 13:46 Nach oben    #12
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard

VIELEN DANK, Jann

Ich werde mir das Ding mal vornehmen und versuchen zu verstehen
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 15:20 Nach oben    #13
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard

@jann: Hab alles verstanden, denk ich

Nach etwas anpassungsarbeit funktioniert das ganze für meinen zweck nun 1a.

Vielen Dank nochmal für Deine Mühe!
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 15:56 Nach oben    #14
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

@lokari, wenn du Fragen zu der von mir geschriebenen Funktion hast, dann schieß los. Man hätte sie sicherlich noch kürzer schreiben können, aber du sollst das ja noch nachvollziehen können!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!

Geändert von Jann Hendrik (07.01.2006 um 16:29 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 20:33 Nach oben    #15
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

War diese kleine Unverträglichkeit nicht ein Bug in PHP 5.1.0, der ein paar Tage später durch 5.1.1 beseitigt wurde?
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 21:12 Nach oben    #16
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Zitat:
Zitat von Lars
War diese kleine Unverträglichkeit nicht ein Bug in PHP 5.1.0, der ein paar Tage später durch 5.1.1 beseitigt wurde?
Joa. Hat ich auch so verstanden und hier darauf hingewiesen .. in Form eines Links:
http://forum.developers-guide.net/showthread.php?t=693 bzw. mein zweiter Beitrag in diesem Thread.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 21:14 Nach oben    #17
Benutzer
 
Registriert seit: 28.12.2005
Beiträge: 35
Standard

hmm falls es nicht schon erwähnt wurde... ich verwende Version 5.1.1
lokari ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2006, 10:22 Nach oben    #18
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von Lars
War diese kleine Unverträglichkeit nicht ein Bug in PHP 5.1.0, der ein paar Tage später durch 5.1.1 beseitigt wurde?
Es war kein Bug.
http://ilia.ws/archives/95-PHP-5.1.1-Released!.html
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2006, 14:35 Nach oben    #19
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

@dejan:
Folge mal obigem Link ..
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.01.2006, 22:24 Nach oben    #20
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von Ben
@dejan:
Folge mal obigem Link ..
oops
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


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

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 an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit ver-, bzw entschlüsslung Garnele PHP-Programmierung 1 29.01.2007 16:39
Probleme mit Strato / Arcor? MrNiceGuy Plauderecke 15 28.12.2006 23:35
Zend Framework - Probleme mit Zend_Controller_RewriteRouter bzw. Form der URLs Ben PEAR, PECL und Frameworks 12 24.12.2006 17:17
Caching mittels dbm-Dateien, Probleme mit dba_popen() Ben PHP-Programmierung 4 27.07.2006 13:23
Date hireday = GregorianCalendar...... Java17 Allgemeine Java-Programmierung 10 10.03.2005 16:59


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:44 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10