Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Datum nach Zeitzonen    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
     Datum nach Zeitzonen Zitat | Bearbeiten

Manchmal schreibt man ja auch Programme die eine Zeitangabe ausgeben. Beispiel ist hier ja direkt ein Forum.

Problem ist es keines hier eine Zeit auszugeben, man setzt einfach date() ein. Doch ist diese Zeit nicht für jeden gleich. Was ist wenn ich in den USA sitze und in ein Forum schaue, was auf einen Server in Deutschland gehostet wird? Dann wird mir da auch die Deutsche Zeit angezeigt. Anderesrum gibt es auch Personen
die einen Server im Ausland haben und dort nur eben Personen aus der Deutschen Zeitzone (UTC +1) schauen, so wäre da aber dann die Dortige Zeitzone relevant.

Natürlich gibt es die Funktion gmdate, welche einen Zeitstempel nach GMT/UTC Standart bearbeitet, und genau das ist der Schlüssel dazu.
Daraus entsteht eine einfache Funktion die drei Parameter braucht.
Den Zeitstempel, die Zeitzone und die Formatierung.
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php
function utc_date($timestamp$timezone '0'$format 'd.m.Y, H:i'$summertime false)
    {
        
$timestamp += (3600*intval($timezone));
        if(
$summertime === true)
        {
            
$timestamp += 3600;
        }
        return 
gmdate($format$timestamp);
    }
?>

In der Funktion gibt es auch nicht die Sommerzeit, diese hätte man auch Automatisch bestimmen können, aber es gibt Länder die eben keine Sommerzeit haben. (Japan wäre so eines.)
Was macht due Funktion? Ihr übergebt der Funktion einen Zeitstempel sowie die Zeitzone, Standart ist 0. Erlaubte werte wären -1 0 +1 2 2.5 usw. Also eben die Zeitzonen in Zahlenform mit + und -.
Beispiel 1:
 PHP 
1:
2:
3:
4:
5:
6:
<?php
$time 
time();
$zeitzone = +//Zeitzone Mitteleuropa

echo utc_date($time,$zeitzone);
?

Die Ausgabe wäre in diesem Fall die Aktuelle Zeit in Deutschland. Würden wir als Parameter fpr die Zeitzone 0 Einsetzten, hätten wir die Zeit in London, +9 wäre die Zeit in Tokio und -6 in New York.

Wollen wir auch noch eine eigene Zeitformatierung haben, übergeben wir einen Dritten Parameter mit der Formatierung.
 PHP 
1:
2:
3:
4:
5:
<?php
//selbe wie im Beispiel 1.
$format "d.m.Y";
echo 
utc_date($time,$zeitzone,$format);
?>

Die Ausgabe wäre in diesem Fall der Tag.Monat.Jahr, würden wir nur H:i:s übergeben würden wir die Stunden:Minuten:Sekunden bekommen.

Jetzt kann es manchmal vorkommen das es noch Sommer ist und wir eine Sommerzeit brauchen. Das können wir jetzt aber einfacher überprüfen oder dem Besucher selbst überlassen.
 PHP 
1:
2:
3:
4:
5:
6:
7:
<?php
//selbe wie im Beispiel 1 und 2
if($_POST['summertime'] == 'yes') {
$summertime true;
}
echo 
utc_date($time,$zeitzone,$format,$summertime);
?>

Wäre jetzt Winterzeit, und die Zeitzone +1, wäre die Ausgabe so, als wäre die ZEitzone +2 oder wir wären gerade in der Sommerzeit.

Ein Dank geht an einen Freund von mir. Ach ja, direkt vorweg, das ist ein Codeschnipsel den ich mal für mich angepasst habe, es gibt soviele Möglichkeiten dafür und mir sind sehr viele bekannt.
Viel Spaß damit.





Post wurde schon 1x editiert, das letzte mal am 31.12.2006 um 17:23 von Teralios
31.12.2006, 17:17 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Einen kleinen Fehler hast du aber noch

In deinem 2ten Abschnitt fehlt ein Semikolon !


$zeitzone = +1; //Zeitzone Mitteleuropa


Genau hinter dem +1

Mfg DAAfH


30.03.2009, 08:49  


Neuling


Dabei seit: 01.01.1970
Herkunft:
Posts:
      Zitat | Bearbeiten

Zitat:
Orginal von GameR
Manchmal schreibt man ja auch Programme die eine Zeitangabe ausgeben. Beispiel ist hier ja direkt ein Forum.

Problem ist es keines hier eine Zeit auszugeben, man setzt einfach date() ein. Doch ist diese Zeit nicht für jeden gleich. Was ist wenn ich in den USA sitze und in ein Forum schaue, was auf einen Server in Deutschland gehostet wird? Dann wird mir da auch die Deutsche Zeit angezeigt. Anderesrum gibt es auch Personen
die einen Server im Ausland haben und dort nur eben Personen aus der Deutschen Zeitzone (UTC +1) schauen, so wäre da aber dann die Dortige Zeitzone relevant.

Natürlich gibt es die Funktion gmdate, welche einen Zeitstempel nach GMT/UTC Standart bearbeitet, und genau das ist der Schlüssel dazu.
Daraus entsteht eine einfache Funktion die drei Parameter braucht.
Den Zeitstempel, die Zeitzone und die Formatierung.
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php
function utc_date($timestamp$timezone '0'$format 'd.m.Y, H:i'$summertime false)
    {
        
$timestamp += (3600*intval($timezone));
        if(
$summertime === true)
        {
            
$timestamp += 3600;
        }
        return 
gmdate($format$timestamp);
    }
?>

In der Funktion gibt es auch nicht die Sommerzeit, diese hätte man auch Automatisch bestimmen können, aber es gibt Länder die eben keine Sommerzeit haben. (Japan wäre so eines.)
Was macht due Funktion? Ihr übergebt der Funktion einen Zeitstempel sowie die Zeitzone, Standart ist 0. Erlaubte werte wären -1 0 +1 2 2.5 usw. Also eben die Zeitzonen in Zahlenform mit + und -.
Beispiel 1:
 PHP 
1:
2:
3:
4:
5:
6:
<?php
$time 
time();
$zeitzone = +//Zeitzone Mitteleuropa

echo utc_date($time,$zeitzone);
?

Die Ausgabe wäre in diesem Fall die Aktuelle Zeit in Deutschland. Würden wir als Parameter fpr die Zeitzone 0 Einsetzten, hätten wir die Zeit in London, +9 wäre die Zeit in Tokio und -6 in New York.

Wollen wir auch noch eine eigene Zeitformatierung haben, übergeben wir einen Dritten Parameter mit der Formatierung.
 PHP 
1:
2:
3:
4:
5:
<?php
//selbe wie im Beispiel 1.
$format "d.m.Y";
echo 
utc_date($time,$zeitzone,$format);
?>

Die Ausgabe wäre in diesem Fall der Tag.Monat.Jahr, würden wir nur H:i:s übergeben würden wir die Stunden:Minuten:Sekunden bekommen.

Jetzt kann es manchmal vorkommen das es noch Sommer ist und wir eine Sommerzeit brauchen. Das können wir jetzt aber einfacher überprüfen oder dem Besucher selbst überlassen.
 PHP 
1:
2:
3:
4:
5:
6:
7:
<?php
//selbe wie im Beispiel 1 und 2
if($_POST['summertime'] == 'yes') {
$summertime true;
}
echo 
utc_date($time,$zeitzone,$format,$summertime);
?>

Wäre jetzt Winterzeit, und die Zeitzone +1, wäre die Ausgabe so, als wäre die ZEitzone +2 oder wir wären gerade in der Sommerzeit.

Ein Dank geht an einen Freund von mir. Ach ja, direkt vorweg, das ist ein Codeschnipsel den ich mal für mich angepasst habe, es gibt soviele Möglichkeiten dafür und mir sind sehr viele bekannt.
Viel Spaß damit.



Dein realease ist super toll nur muss ich dir 2 Fehler andocken Oo

Ich poste einfach nurmal die Codes wie du es gemacht hast und darunter dann mein verbessertes GameR

 PHP 
1:
2:
3:
4:
5:
6:
<?php
$time 
time();
$zeitzone = +//Zeitzone Mitteleuropa

echo utc_date($time,$zeitzone);
?


Und jetzt meins deine Geschicklichkeitsfehler zu meinem Vorteil xD

 PHP 
1:
2:
3:
4:
5:
6:
<?php
$time 
time();
$zeitzone = +1//Zeitzone Mitteleuropa

echo utc_date($time,$zeitzone);
?>


Zusätzlich ahbe ich mal alle Zeitzonen aufgelistet! Also sind diese hier nur - bzw. + Zeichen mit den jeweiligen $zeitzone - Variable zu ersetzen!
Zitat:
GMT -12:00) Eniwetok, Kwajalein
GMT -11:00) Midway Island, Samoa
(GMT -10:00) Hawaii
(GMT -9:00) Alaska
(GMT -8:00) Pacific Time (US &amp; Canada)
(GMT -7:00) Mountain Time (US &amp; Canada)
(GMT -6:00) Central Time (US &amp; Canada), Mexico City
(GMT -5:00) Eastern Time (US &amp; Canada), Bogota, Lima
(GMT -4:30) Caracas
(GMT -4:00) Atlantic Time (Canada), La Paz, Santiago
(GMT -3:30) Newfoundland
(GMT -3:00) Brazil, Buenos Aires, Georgetown
(GMT -2:00) Mid-Atlantic
(GMT -1:00 hour) Azores, Cape Verde Islands
(GMT) Western Europe Time, London, Lisbon, Casablanca
(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris
(GMT +2:00) Kaliningrad, South Africa
(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg
(GMT +3:30) Tehran
(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi
(GMT +4:30) Kabul
(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent
(GMT +5:30) Mumbai, Kolkata, Chennai, New Delhi
(GMT +5:45) Kathmandu
(GMT +6:00) Almaty, Dhaka, Colombo
(GMT +6:30) Yangon, Cocos Islands
(GMT +7:00) Bangkok, Hanoi, Jakarta
(GMT +8:00) Beijing, Perth, Singapore, Hong Kong
(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk
(GMT +9:30) Adelaide, Darwin
(GMT +10:00) Eastern Australia, Guam, Vladivostok
(GMT +11:00) Magadan, Solomon Islands, New Caledonia
(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka



02.04.2009, 05:53 Profil | PM | E-Mail  
Thoro
Mitglied
Exzellenter User


Dabei seit: 29.09.2008
Herkunft: keine Angabe
Posts: 1126
      Zitat | Bearbeiten

Schön, dass du nochmal wiederholst, was der Gast vor dir schon korrgiert hat, Altecer. Bei den Zeitzonen fehlen meines Erachtens noch ein paar. Meines Wissens gibt es auch noch +13 und +14 auf irgendwelchen kleinen Inseln im Pazifik.


Leidenschaftlicher Rechtschreibfehler-Sammler sucht mehrere Lagerhallen zwecks Erweiterung der Sammlung. Bis zur Vergrößerung der Lagerkapazitäten bitte möglichst keine Rechtschreibfehler mehr posten. Danke.
02.04.2009, 15:17 Profil | PM | Homepage | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Datum nach Zeitzonen   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz