Formula 1 WebTip - Problem mit der Sommerzeit

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Formula 1 WebTip - Problem mit der Sommerzeit

Beitrag von Dungeonwatcher »

Moin! 8)

Seit der Zeitumstellung habe ich wieder ein massives Problem mit der angezeigten Zeit von Rennbeginn und Deadline. Alle Rennzeiten die vor der Zeitumstellung eingetragen wurden sind um 1h verschoben (anstelle 14:00 Uhr nun 15:00 Uhr etc.). :-?

Nächstes Problem betrifft die Änderung der Rennzeit am Renntag. Wenn ich diese ändern will steht im Editiermodus nicht die vorherige (falsche) Zeit, sondern sie fehlt ganz und muss kplt. neu eingetragen werden, allerdings dann die korrekte Zeit.

Ändere ich nun die anderen falschen Rennzeiten, dann muss ich dort wieder 1h abziehen, statt 14:00 muss ich 13:00 Uhr angeben.

Der Versuch in der admin_formel_racec.php diesen Code von

Code: Alles auswählen

	$racetime = mktime($b_hour, $b_minute, $b_second, $b_month, $b_day, $b_year, date("I"));
	//$racetime -= $board_config['board_timezone'] * 3600;
in

Code: Alles auswählen

	$racetime = mktime($b_hour, $b_minute, $b_second, $b_month, $b_day, $b_year, date("0"));
	$racetime -= $board_config['board_timezone'] * 3600;
zu ändern brachte nur einen Teilerfolg. Damit funktioniert zwar das Eintragen und die Anzeige der Rennzeiten, nur äuft die Deadline 1h zu früh ab.

Dieses Problem hatte ich schon im letzten Jahr und konnte es nicht lösen, darum nun ein erneuter Versuch die Lösung zu finden. Was läuft hier so vollkommen falsch?
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Code: Alles auswählen

date("I")
ist 1, wenn die Sommerzeit aktuell ist ansonsten 0. Von daher ist

Code: Alles auswählen

date("0")
eigentlich unsinnig.
Dummerweise gilt

Code: Alles auswählen

date("I") == 1 
für alle Zeiten. Also auch für die Zeiten, die vor der Sommerzeit beginnen, da Dein Board wahrscheinlich schon die Zeitumstellung mitmacht und es somit evtl. eine doppelte Verschiebung der Zeit um eine Stunde gibt.

Du müsstest also eine Unterscheidung treffen, ab wann die Sommerzeit gilt und

Code: Alles auswählen

date("I")
wirken "darf".
Ansatz: Die Sommerzeit beginnt am letzten Sonntag im März und endet am letzten Sonntag im Oktober.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Beitrag von Dungeonwatcher »

Hi! 8)
Miriam hat geschrieben:...da Dein Board wahrscheinlich schon die Zeitumstellung mitmacht und es somit evtl. eine doppelte Verschiebung der Zeit um eine Stunde gibt.
Jupp, genauso ist es. Hier rödelt ein eigener lokaler Webserver unter meinem Schreibtisch im Wohnzimmer. Darauf tut OS/2 (Wer's noch kennt...:grin:) bestens als BS seinen Dienst. Die Systemzeit wird korrekterweise automatisch zum Beginn und zum Ende der Sommerzeit umgestellt. Nur wie bringe ich es dem F1 Mod bei, das dies bereits geschieht und er dies nicht selber umstellen braucht? PHP ist nicht wirklich meine Stärke. :oops:
Benutzeravatar
roger
Mitglied
Beiträge: 565
Registriert: 30.10.2002 21:32
Wohnort: Bavaria D.C.

Beitrag von roger »

Hi,

laut php-Manual heisst es bei mktime() u.a.:
is_dst kann bei Sommerzeit auf 1 gesetzt werden. 0 bedeutet Winter-/Normalzeit, -1 (Vorgabewert) heißt, dass nicht bekannt ist, ob Sommer- oder Winterzeit herrscht. Falls nicht bekannt ist, ob Sommer- oder Winterzeit herrscht, versucht PHP dies selbst herauszufinden. Das kann zu unerwarteten (aber dennoch korrekten) Ergebnissen führen.
Unter der Voraussetzung, dass du sowieso die Sommerzeit automatisch einstellst, war deine Idee gar nicht so schlecht:

Code: Alles auswählen

$racetime = mktime($b_hour, $b_minute, $b_second, $b_month, $b_day, $b_year, date("0")); 
Ich würde es aber mit

Code: Alles auswählen

$racetime = mktime($b_hour, $b_minute, $b_second, $b_month, $b_day, $b_year, 0); 
versuchen.

roger
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

OS/2 Warp? *ggg*

Wie wird denn die Deadline eingetragen... also wie sieht der Code aus?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Beitrag von Dungeonwatcher »

Miriam hat geschrieben:OS/2 Warp? *ggg*
Naja, mittlerweile heißt es ja eComStation. :wink:
Wie wird denn die Deadline eingetragen... also wie sieht der Code aus?
Der Verantwortliche Code dürfte in diesen beiden Dateien sein:

admin_formel_races.php
bzw.
formel.php
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Deadline = Differenz aus Rennbeginn und eingestelltem Wert für Deadline Offset (in Sekunden)
Dürfte also nicht das Problem sein. Vorausgesetzt, deine Zeit für Rennbeginn stimmt. easy
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Formel 1 - Deadline 1h zu früh?

Beitrag von Dungeonwatcher »

'n Abend! 8)
easygo hat geschrieben:Deadline = Differenz aus Rennbeginn und eingestelltem Wert für Deadline Offset (in Sekunden)
Dürfte also nicht das Problem sein. Vorausgesetzt, deine Zeit für Rennbeginn stimmt.
Die eingetragenen und die angezeigten Zeiten stimmen.

Dies dürfte der verantwortliche Code sein:

Code: Alles auswählen

//
// Add/edit a tipp
//
if ( ($place_my_tipp || $edit_my_tipp) && $tipp_time > time() - $formel_config['deadline_offset'] ) 
{
	for ($i = 0; $i < 8; $i++) 
	{
		$value = $HTTP_POST_VARS['place'.($i+1)];
		if (checkarrayforvalue($value,$my_tipp_array)) 
		{
			$tipp_msg = sprintf($lang['formel_doublicate_values'], '<a href="javascript:history.back()" class="gen">', '</a>', '<a href="'.append_sid("index.$phpEx").'" class="gen">', '</a>');
			message_die(GENERAL_MESSAGE, $tipp_msg);
		}
		$my_tipp_array[$i] = $value;
	}
	$my_tipp_array[8] = $HTTP_POST_VARS['place9'];
	$my_tipp_array[9] = $HTTP_POST_VARS['place10'];
	$my_tipp = implode(",",$my_tipp_array);

	if ($place_my_tipp) 
	{
		$sql = "INSERT INTO " . FORMEL_TIPPS_TABLE . " 
				(tipp_id,tipp_user,tipp_race,tipp_result,tipp_points)
				VALUES 
				('',$user_id,$race_id,'$my_tipp',0)";
	}
	else 
	{
		$sql = "UPDATE " . FORMEL_TIPPS_TABLE . " SET tipp_result = '$my_tipp'
				WHERE tipp_user = $user_id 
				AND tipp_race = $race_id";
	}
	if (!$result = $db->sql_query($sql))
	{
		message_die(GENERAL_ERROR, 'Could not update database', '', __LINE__, __FILE__, $sql);
	}
	$tipp_msg = sprintf($lang['formel_accepted_tipp'], '<a href="'.append_sid("formel.$phpEx").'" class="gen">', '</a>', '<a href="'.append_sid("index.$phpEx").'" class="gen">', '</a>');
	message_die(GENERAL_MESSAGE, $tipp_msg);
}
Bye/2
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Re: Formel 1 - Deadline 1h zu früh?

Beitrag von Dungeonwatcher »

Moin! 8)
Dungeonwatcher hat geschrieben:
easygo hat geschrieben:Deadline = Differenz aus Rennbeginn und eingestelltem Wert für Deadline Offset (in Sekunden)
Dürfte also nicht das Problem sein. Vorausgesetzt, deine Zeit für Rennbeginn stimmt.
Die eingetragenen und die angezeigten Zeiten stimmen.
Hier muss ich mich jetzt mal korrigieren. Es stimmen zwar die angezeigten Werte, aber in die Datenbank wird ein falscher Wert eingetragen:

1183442580 - wurde in die Tabelle gespeichert (08:03) <- falsch
1183446180 - aktuelle Zeit (09:03) <- korrekt

Wie unschwer zu sehen ist, werden hier 3600 Sekunden (= 1h) zu wenig berechnet und in die Datenbank eingetragen. Dafür dürfte dieser Codeschnipsel aus der admin_formel_races.php verantwortlich sein:

Code: Alles auswählen

//
// Add a new race
//
if( $button_add && $racename != '' )
{
	$racetime = mktime($b_hour, $b_minute, $b_second, $b_month, $b_day, $b_year, date("0"));
	$racetime -= $board_config['board_timezone'] * 3600;

echo $racetime.' - wurde in die Tabelle gespeichert<br />';
echo time().' - aktuelle Zeit<br />';

         if ( $race_id == 0 )
         {
             $sql = "INSERT INTO " . FORMEL_RACES_TABLE . " (race_id,race_name,race_img,race_time,race_length,race_laps,race_distance,race_debut) 
                     VALUES ('','$racename','$raceimg',$racetime,'$racelength',$racelaps,'$racedistance',$racedebut)";
         }
         else {
             if ( $formel_config['show_gfxr'] == 1 )
             {
             $sql = "UPDATE " . FORMEL_RACES_TABLE . " 
                     SET race_name = '$racename',race_img = '$raceimg',race_time = $racetime,race_length = '$racelength',race_laps = $racelaps,race_distance = '$racedistance',race_debut = $racedebut
                     WHERE race_id = $race_id";
             }
             else {
             $sql = "UPDATE " . FORMEL_RACES_TABLE . " 
                     SET race_name = '$racename',race_time = $racetime,race_length = '$racelength',race_laps = $racelaps,race_distance = '$racedistance',race_debut = $racedebut
                     WHERE race_id = $race_id";
             }
         }
         if (!$result = $db->sql_query($sql))
         {
	        message_die(GENERAL_ERROR, 'Could not update database', '', __LINE__, __FILE__, $sql);
         }
         $status =  str_replace('MESSAGE', $lang['formel_acp_racebd_updated'], $status_msg);
}
Bye/2
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Das Problem mit der Winter/Sommerzeit tritt nur beim Eintragen der Rennen auf.

Die Zeit in der Tabelle muss zum Schluss reine UTC sein.

Da einige Rennen in der Winterzeit und der Rest in der Sommerzeit stattfinden kann ich nicht fest sagen:
Bei den ersten beiden Rennen UTC + Board-Timezone und der Rest UTC + Board-Timezone + Sommerzeit berechnen.
Zudem es nicht immer 2 Winterzeitrennen gibt/geben wird :o
Im phpbb3 F1 MOD hab ich es so gelöst, das man bei der Eingabe sein Profil zwischenzeitlich verstellen kann. ( Sommerzeit an oder aus )


P.S. Ich selbst trage alle Renntermine im "Winter" ein, und trage für die "Sommer Rennen" eine Stunde früher ein. ( Uhr wird ja vor-gestellt.... damit passt es dann wieder )
Antworten

Zurück zu „phpBB 2.0: Mod Support“