Seite 1 von 1
Datum speichern und korrekt darstellen
Verfasst: Do 22.Sep, 2005 17:00
von dagobert
So, hab mich entschlossen dazu mal nen Thread aufzumachen, denn im Moment komm ich partout nicht weiter.
Mein Problem:
Ich möchte im ACP ein Datum eingeben und es dann auf einer Seite wieder darstellen.
Mein Gedankengang ist folgender:
Ich gebe eine Zeit ein. Die ist logischerweise MEINE Zeit. mktime(some vars) liefert mir dann doch einen Wert, der theoretisch falsch ist, da ich ja meine Zeitzone mit abgespeichert habe. Wenn ich nun also von der Berechneten Zeit, die mir mktime(some vars) liefert, einfach 3600*$board_config['timezone'] abziehe, müsste ich doch die "Normal Zeit" haben. (in diesem Fall ist board_timezone ja meine timezone, weils wie Du sagtest ja ersetzt wird)
Wenn ich das dann darstellen will, hole ich mir den gespeicherten Wert aus der Datenbank und mit create_date(format, zeit, timezone) berechnet er mir das Datum.
Warum geht das nicht und wo ist mein Denkfehler ? Und an welcher Stelle muss ich mich auf die Config Tabelle beziehen (wie Du meintest) ?
Und was ist überhaupt mit der Sommer/Winterzeit ?
Ich bekomms einfach nicht in meinen Kopf

Verfasst: Do 22.Sep, 2005 18:12
von oxpus
Der Ansatz ist korrekt, Sommer-/Winterzeit sind dabei aber auch noch zu berücksichtigen. mktime prüft das automatisch, wenn Du nicht als letzten, d. h. siebten Parameter date("I") angibts.
gmmktime berücksichtigt dabei aber auch die Zeitzone der Eingabe. Dabei darf aber nicht die User-Zeitzone von der Server-Zeitzone abweichen, sonst ist erneut zu berechnen.
Als alternative wäre auch strtotime zu nennen.
Schau Dir einfach alle drei nochmal in der Online-Hilfe auf php.net an...
Verfasst: Do 22.Sep, 2005 20:57
von dagobert
hmm.....die doku hilft mir leider nicht wirklich weiter. der unterschied zwischen gmmktime und mktime ist mir nicht klar geworden.
ABER es geht nun
doch ist das so auch richtig oder kann man unter irgendwelchen umständen mit dieser lösung probs bekommen?
hiermit speicher ich es ab:
Code: Alles auswählen
$timezone_correction = 3600 * $board_config['board_timezone'];
$racetime = gmmktime($b_hour, $b_minute, $b_second, $b_month, $b_day, $b_year) - $timezone_correction;
um die comboboxen zu füllen nehm ich das:
Code: Alles auswählen
$racetime = $row['race_time'];
$b_day = date('j', $racetime);
$b_month = date('n', $racetime);
$b_year = date('Y', $racetime);
$b_hour = date('G', $racetime);
$b_minute = date('i', $racetime);
$b_second = date('s', $racetime);
und zur textuellen darstellung das:
Code: Alles auswählen
create_date($board_config['default_dateformat'], $row['race_time'], $board_config['board_timezone'])
was mir bei der geschichte gar nicht in den kopf will, ist warum ich bei dem füllen der comboboxen den timestymp einfach so ohne korrektur verwenden kann.
mir is das alles zu kompliziert. das ist in java bedeutend einfacher
edit: doch zu früh gefreut. die comboboxen die in die winterzeit fallen, zeigen 1 stunde zu früh an. das is doch ein murks.
Verfasst: Do 22.Sep, 2005 22:04
von oxpus
Ich sagte ja: Rechne noch mit date("I") * 3600 damit es stimmt...
Verfasst: Do 22.Sep, 2005 22:29
von dagobert
was genau muss ich denn damit machen ? die zeile hier so schreiben ?
dann ist das mit den winterzeit combos richtig aber die sommerzeit combos zeigen nun den falschen wert.
ich raff das einfach nicht. kann ich dir die datei mal anhängen und du guckst mal rein ?
Verfasst: Fr 23.Sep, 2005 09:30
von oxpus
Bei Speichern, nicht beim Auslesen

Verfasst: Fr 23.Sep, 2005 17:46
von dagobert
ich resigniere. ich hab glaub ich alle möglichkeiten bis auf die richtige durchprobiert. immer is irgendwo nen haken und irgendwas passt nicht.
ich hab schon kopfweh vom denken
edit: wollte grad mal in anderen dateien spinksen wies da gelöst ist:
admin_meeting.php funktioniert bei mir ebenfalls nicht richtig. wenn ich 21:40 eintrage, wird mir 20:40 als termin angezeigt.
Verfasst: Fr 23.Sep, 2005 20:12
von oxpus
Du hast vermutlich bei Deiner Funktion create_date() keine Winter-/Sommerzeit-Korrektur.
So müsste die aussehen, damit es korrekt berechnet wird:
Code: Alles auswählen
function create_date($format, $gmepoch, $tz)
{
global $board_config, $lang;
static $translate;
if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}
return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * ($tz+date("I")))), $translate) : @gmdate($format, $gmepoch + (3600 * ($tz+date("I"))));
}
Dazu auch prüfen, ob die Board-Zeitzone korrekt eingestellt ist!
Verfasst: Fr 23.Sep, 2005 20:25
von dagobert
board und user timezone sind korrekt eingestellt.
aber meine create date ist in der tat falsch gewesen. (aktuelles phpbb plain vanilla ist meine testumgebung)
Code: Alles auswählen
function create_date($format, $gmepoch, $tz)
{
global $board_config, $lang;
static $translate;
if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}
return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
}
ich geh dann mal, weiter basteln, vielleicht klappts nun.....
edit: geht leider immernoch nicht. kannst du nochmal nen blick draufwerfen ? mir ist langsam die lust vergangen.....
im moment geht alles, nur wird mir die combobox beim editieren nicht korrekt angezeigt. bei zeiten die in der winterzeit liegen, wird 1 stunde zu früh angezeigt.
aber es wird doch die korrekte zeit in die datenbank eingetragen oder ?
Verfasst: Sa 24.Sep, 2005 13:17
von oxpus
Wen Du es schon mit Zeitzone speicherst, solltest Du es auch entsprechend abfragen.
Anbei die korrigierte Datei. Ich verwende hier auch mktime, da gmmktime nicht immer das korrekte Ergebnis liefert.
Verfasst: Sa 24.Sep, 2005 15:25
von dagobert
danke !
aber leider geht es immernoch nicht. beim abspeichern wird 1 stunde zu früh eingetragen. ich geb 14 ein und es wird 13 angezeigt.
hab auch nochmal im quelltext gecheckt, dass die combos wirklich die richtigen werte abschicken und das tun sie.
meine boardeinstellungen sind auf gmt+1, da durch den sommerzeit fix in der functions ein +2 nicht mehr notwendig ist, richtig ?
(im profil hab ich dann auch +1 eingestellt von daher sollten die einstellungen alle stimmen.)
Verfasst: Sa 24.Sep, 2005 16:46
von oxpus
Dann nimm zum Speichern die Berechnung gemäß der Board-Zeitzone raus. Ursprünglich wird ja auch beim Posten keine Zeitzone berücksichtigt...
Verfasst: Sa 24.Sep, 2005 16:58
von dagobert
ich werd verrückt.....nun geht5s ! thx !
dann kann ich ja gleich das nächste paket schnüren. alle anderen sachen passen nun auch
