PHP Sommerzeit Erkennung Speichern

stimmen
25

Ich brauche eine E-Mail an Benutzer in der Welt um 9:00 Uhr Ortszeit basiert, wo zu senden. Der Server ist in Großbritannien. Was ich tun kann, ist eine Zeitdifferenz zwischen jedem Benutzer und dem Server der Zeit, die noch nicht existierte dann perfekt funktionieren, wenn DST einrichten würde.

Hier ist ein Beispiel zu illustrieren:

  • John arbeitet in New York, -5 Stunden vom Server (UK) Zeit
  • Richard arbeitet in London, Vereinigtes Königreich, so 0 Stunden Differenz mit dem Server.

Wenn der Server von GMT in GMT +1 (BST) um 2:00 Uhr an einem bestimmten Sonntag geht, bedeutet dies, dass John jetzt nun eine -6H Zeitdifferenz hat.

Dieses Szenario , das ich alle Benutzer noch verarbeiten kann außerhalb des Servers Ortszeit durch die Aktualisierung, aber sobald ich habe vorwärts / rückwärts die Zeit aller anderen Benutzer bewegt, muss ich noch eine Möglichkeit zu erkennen , wann (Datum und Uhrzeit) , um die Nutzer leben außerhalb Großbritanniens (oder nicht) , um ihre lokale Zeit zu einem wahrscheinlichen DST eines ändern.

Ich brauche eine PHP-Methode kennen / erkennen, wenn andere Teile der Welt / Ausfahrt DST werden eingeben.

Veröffentlicht am 27/05/2011 um 17:35
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
12

Meine Antwort ändern ein bisschen: DateTimeZone :: getTransitions sieht aus wie es das tun , was Sie brauchen, vorausgesetzt , Sie PHP> = 5.2 haben.

Von einem Kommentar in der Dokumentation:

<?php 
$theTime = time(); // specific date/time we're checking, in epoch seconds. 

$tz = new DateTimeZone('America/Los_Angeles'); 
$transition = $tz->getTransitions($theTime, $theTime); 

// only one array should be returned into $transition. Now get the data: 
$offset = $transition[0]['offset']; 
$abbr = $transition[0]['abbr']; 
?>

Also hier, alles, was wir tun müssen, ist in der Zeitzone wollen wir passieren überprüfen und wir können wissen, ob das Zeitzone in DST ist / was der Offset. Sie werden dann die gegen GMT Offset müssen überprüfen, um zu sehen, wenn Sie wollen nun Ihre E-Mail schicken, oder jetzt nicht.

Beantwortet am 27/05/2011 um 17:40
quelle vom benutzer

stimmen
23

Haben Sie alle Details DST Übergang selbst wissen müssen? oder brauchen Sie nur zu wissen, wann ist 09.00 Uhr in einer bestimmten Zeitzone?

Falls das letzte ist, kann PHP Ihr Betriebssystem die Zeitzone - Datenbank verwenden , die für Sie zu tun. Die strtotime () Funktion ist bemerkenswert gut „herauszufinden , “ was Sie bedeuten:

echo strtotime("today 9:00 am America/New_York");  // prints "1306501200"
echo strtotime("today 9:00 am Europe/London");     // prints "1306483200"

So stellen Sie sicher , dass Sie mit einer der PHP unterstützt Zeitzonen .

Beantwortet am 27/05/2011 um 19:40
quelle vom benutzer

stimmen
19

Als Jimmy weist darauf hin, können Sie Zeitzone Übergänge verwenden, aber das ist auf PHP <5.3 nicht verfügbar. als dateTimeZone () ist PHP> = 5.2.2 aber getTransitions () mit Argumenten ist es nicht! In diesem Fall ist hier eine Funktion, die Ihnen Zeitzone Daten, einschließlich, ob in DST oder nicht geben kann.

function timezonez($timezone = 'Europe/London'){
    $tz = new DateTimeZone($timezone);
    $transitions = $tz->getTransitions();
    if (is_array($transitions)){
        foreach ($transitions as $k => $t){
            // look for current year
            if (substr($t['time'],0,4) == date('Y')){
                $trans = $t;
                break;
            }
        }
    }
    return (isset($trans)) ? $trans : false;
}

Having said that, gibt es eine einfachere Methode ist mit Datum (), wenn Sie müssen nur wissen, ob eine Zeitzone in DST ist. Wenn Sie zum Beispiel wissen wollen, ob Großbritannien im DST ist, können Sie dies tun:

date_default_timezone_set('Europe/London');
$bool = date('I'); // this will be 1 in DST or else 0

... oder einen Zeitstempel als zweites ARG date () liefern, wenn Sie einen Datetime anderen als die aktuelle Serverzeit angeben mögen.

Beantwortet am 14/06/2012 um 13:02
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more