![]() |
[PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Hallo,
ich möchte abhängig von einer gewählten Zeitzone die Zeitangaben einer Website anpassen. Versucht habe ich es so:
Code:
Hinter dem Code steckt folgende Überlegung:
function get_time_str($timestamp, $format, $user_timezone_offset)
{ $gm_time = gmmktime(); // greenwich mean time (GMT) $server_time = time(); $server_time_offset = $server_time - $gm_time; return date($format, $timestamp + $user_timezone_offset - $server_time_offset); } Zuerst wird mit gmmktime der aktuelle Timestamp in der Greenwich-Zeitzone (GMT) ermittelt. Anschließend ermittle ich mit time den Timestamp mit der Zeitzone, die der Server eingestellt hat. Aus der Differenz erhalte ich nun die am Server eingestellte Zeitzone (als Sekunden-Offset bezogen auf die GMT). Vom zu formatierenden Timestamp ziehe ich nun den Offset des Servers ab und addiere den Offset des Benutzers. Ist mein Vorgehen denn richtig? Mein Problem ist nämlich, dass bei meinem Hoster $gm_time und $server_time identisch sind. Somit erhalte ich bei gewähltem Offset 3600 (GMT+1) eine Zeitangabe, die um 1 Stunde zu hoch ist. Ich möchte nicht in der php.ini oder ähnlichem Dinge anpassen müssen, sondern ausschließlich Standard-PHP-Funktionen verwenden. Grüße, Matze |
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Also für PHP5 gäbe es das hier:
![]() Mit freundlichen Grüßen, Valle |
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Hallo,
diese Funktion habe ich auch gesehen, danke. Doch momentan nutze ich PHP 5.0.4 und es wäre schön, wenn ich das auch damit hinbekommen könnte. Was ist denn falsch an meiner Lösung? Grüße |
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Moin moin,
hiermit sollte das gehen:
Delphi-Quellcode:
function get_zeitzonen_diff ( )
{ $iTime = time(); $ar = localtime ( $iTime ); $ar[5] += 1900; $ar[4]++; $timezonetime = gmmktime ( $ar[2], $ar[1], $ar[0], $ar[4], $ar[3], $ar[5], $ar[8] ); return ( $timezonetime - $iTime ); } |
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Hallo!
Klasse, danke. Das funktioniert. Ich habe nun nach ![]()
Code:
Grüße
/**
* This function returns the server timezone offset in seconds * e.g. Sydney in DST returns +1100 / 100 * 60 * 60 = 39600 */ function getServerTimeZoneOffset() { return date("O") / 100 * 60 * 60; // Seconds from GMT } |
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Hallo zusammen!
Ich habe feststellen müssen, dass seit einem Serverumzug die ganzen Zeiten nicht mehr stimmen und genau dies sollte nicht so sein. Wie kann man denn in PHP (wenn's geht < 5.1.0) den GMT-Timestamp ermitteln? Ich bin im Internet auf mehrere Lösungen gestoßen, doch keine funktioniert bei mir. Darunter waren u.a.
Code:
oder
function fetchGMT()
{ return mktime () + ((date('O')/100 )/-1)*60*60 ; }
Code:
Wenn ich das hier aufrufe:
gmmktime();
Code:
müsste ich doch eigentlich die aktuelle Ortszeit minus einer Stunde bekommen, da wir GMT+1 (bzw. aktuell GMT+2) sind, oder? Denn da kommt bei mir alles raus, nur nicht das.
echo date("d.m.Y H:s", $gmt_ts);
Hintergrund ist der, dass ich alle Timestamps, die ich in die Datenbank schreibe, auf GMT beziehen möchte, um so die vom Benutzer eingestellte Zeitzone berücksichtigen und drauf rechnen zu können. Nur muss ich auch noch irgendwie die Sommerzeit berücksichtigen. :gruebel: Einiges steht ![]() Grüße |
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Du willst die Zeit doch für den Client anzeigen. (Warum eigentlich? Der hat doch in der Regel ne Uhr in der Taskleiste?).
Wenn Du aber eh die Client-Spezifische Zeit anzeigen lassen willst (und Du eh eine AJAX-Seite hast, wie ich annehme), warum zeigst Du dann nicht mit einem JavaScript-Einzeiler gleich Clientseitig die Client-Zeit an? Erspart Dir die ganze Umrechnerei auf dem Server. Vergiss es.. man sollte auch lesen... Es geht wohl nicht nur um die aktuelle Zeit... Trotzdem: Übertrage doch die Zeiten genauso, wie Du sie auf dem Server hast, zusammen mit der aktuellen Zeitzone des Servers. Die Umrechnung auf die Client-Zeit würde ich dann in Javascript auf dem Client machen. Der kennt seine Zeitzone und kann die Differenz entsprechend ausrechnen (und die paar Tags in denen die Zeit steht austauschen). |
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Hi Sebby,
ne JS ist Quatsch in dem Fall. Ich möchte es wie in der DP beispielsweise. Man kann im Profil die Zeitzone wählen und die berechnete Zeit zeigt es dann korrekt bei jedem einzelnen Beitrag an. Grüße |
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Hast du (um die differenz der Serverzeit zu bekommen) schon mmal date('Z') probiert?
|
Re: [PHP] Zeitzone berücksichtigen - Was mache ich falsch?
Hi,
nein und ich habe soeben festgestellt, dass ich diese Differenz gar nicht benötige. Ich speichere die GMT-Zeit (ermittelt mit gmmktime()) und da genügt es, die Zeitzonen "aufzuaddieren":
Code:
Das funktioniert soweit, nur wirft mir PHP im E_STRICT-Modus diese Fehler:
function get_time_str($timestamp, $format, $user_timezone_offset)
{ $new_timestamp = $timestamp + $user_timezone_offset; // MS Windows could not handle negative timestamps if ($new_timestamp < 0) { return 'never'; } $summertime = date("I") * 60 * 60; // date("I") returns 1 if summertime is active, 0 if not return date($format, $new_timestamp - $summertime); }
Code:
Kann man dagegen etwas tun? Denn time() wäre ja wieder nur die Serverzeit und nicht GMT.
gmmktime() [[url='function.gmmktime']function.gmmktime[/url]]: You should be using the time() function instead
date() [[url='function.date']function.date[/url]]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Paris' for '2.0/DST' instead Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz