Datum speichern und korrekt darstellen

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
Benutzeravatar
dagobert
Beiträge: 457
Registriert: Mo 08.Mär, 2004 13:46
Wohnort: Altenkirchen
Kontaktdaten:

Datum speichern und korrekt darstellen

Beitrag 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 ;)
Zuletzt geändert von dagobert am Do 22.Sep, 2005 17:05, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
dagobert
Beiträge: 457
Registriert: Mo 08.Mär, 2004 13:46
Wohnort: Altenkirchen
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von dagobert am Do 22.Sep, 2005 21:03, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich sagte ja: Rechne noch mit date("I") * 3600 damit es stimmt...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
dagobert
Beiträge: 457
Registriert: Mo 08.Mär, 2004 13:46
Wohnort: Altenkirchen
Kontaktdaten:

Beitrag von dagobert »

was genau muss ich denn damit machen ? die zeile hier so schreiben ?

Code: Alles auswählen

$racetime = $row['race_time'] + date("I") * 3600;
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 ?
Zuletzt geändert von dagobert am Fr 23.Sep, 2005 03:37, insgesamt 2-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Bei Speichern, nicht beim Auslesen ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
dagobert
Beiträge: 457
Registriert: Mo 08.Mär, 2004 13:46
Wohnort: Altenkirchen
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von dagobert am Fr 23.Sep, 2005 18:07, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
dagobert
Beiträge: 457
Registriert: Mo 08.Mär, 2004 13:46
Wohnort: Altenkirchen
Kontaktdaten:

Beitrag 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 ?
Dateianhänge

[Die Dateierweiterung txt wurde deaktiviert und kann nicht länger angezeigt werden.]

Zuletzt geändert von dagobert am Fr 23.Sep, 2005 22:06, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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.
Dateianhänge
admin_formel_races.zip
(3.19 KiB) 194-mal heruntergeladen
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
dagobert
Beiträge: 457
Registriert: Mo 08.Mär, 2004 13:46
Wohnort: Altenkirchen
Kontaktdaten:

Beitrag 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.)
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Dann nimm zum Speichern die Berechnung gemäß der Board-Zeitzone raus. Ursprünglich wird ja auch beim Posten keine Zeitzone berücksichtigt...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
dagobert
Beiträge: 457
Registriert: Mo 08.Mär, 2004 13:46
Wohnort: Altenkirchen
Kontaktdaten:

Beitrag 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 ;)
Antworten