PHP nyári időszámítás felderítése

szavazat
25

Azt kell, hogy küldjön egy e-felhasználók számára, bárhol a világon, 09:00 helyi idő szerint. A szerver az Egyesült Királyságban. Mit tehetek úgy van beállítva, egy ideje közötti különbség minden felhasználó és a szerver idő, amely aztán tökéletesen működik, ha DST nem létezik.

Íme egy példa, hogy bemutassa azt:

  • John dolgozik New Yorkban, -5 óra a szerver (UK) idő
  • Richard dolgozik Londonban, így 0 óra különbség van a szerverrel.

Ha a szerver megy GMT GMT +1 (BST) 2:00 egy bizonyos vasárnap, ez azt jelenti, hogy John most már -6H időeltolódás most.

Ez a forgatókönyv még most is kezelni frissítésével minden felhasználó számára ezen kívül a kiszolgáló helyi idő, de ha egyszer már átkerült előre / hátra az időben az összes többi felhasználó, még mindig szükség van egy módja annak, hogy érzékeli , ha (idő és dátum) a felhasználók élő az Egyesült Királyságon kívül lesz (vagy nem) módosíthatják a helyi időt egy valószínű DST egyet.

Kell egy PHP módszert tudja / felismerni, ha más a világ belép / kilép DST.

A kérdést 27/05/2011 17:35
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
12

Módosítása a válasz egy kicsit: DateTimeZone :: getTransitions néz ki, hogy meg fog tenni, amire szüksége van, feltéve, ha van PHP> = 5,2.

Egy megjegyzés a dokumentációban:

<?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']; 
?>

Tehát itt, csak annyit kell tennie, hogy adja át a időzónát akarjuk ellenőrizni, és mi is tudom, hogy az időzóna van DST / mi az offset. Ezután meg kell, hogy ellenőrizze a levonható GMT hogy ha azt szeretnénk, hogy küldje el e-mail most, vagy nem most.

Válaszolt 27/05/2011 17:40
a forrás felhasználó

szavazat
23

Tudni kell tudni minden részletet DST átmenet magad? vagy csak tudni kell, ha van 09:00 adott időzónát?

Ha ez utóbbi, a PHP is használhatja az operációs rendszer időzóna-adatbázist, hogy az Ön számára. A strtotime () függvény rendkívül jó „kitalálni”, hogy mit jelent:

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

Csak győződjön meg róla, hogy használja az egyik PHP támogatott időzónák .

Válaszolt 27/05/2011 19:40
a forrás felhasználó

szavazat
19

Mivel Jimmy rámutat használhatja időzónát átmenetek, de ez nem áll rendelkezésre a PHP <5.3. mint dateTimeZone () a PHP> = 5.2.2, de getTransitions () érvekkel nem! Ebben az esetben itt egy olyan funkció, hogy adhat időzónát adatokat, beleértve akár a DST vagy sem.

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;
}

Azt mondta, hogy van egy egyszerűbb módszer date (), ha csak meg kell tudni, hogy egy időzóna a DST. Például, ha azt szeretné tudni, hogy az Egyesült Királyságban van, DST, akkor ezt:

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

... vagy szállítani időbélyeggel második arg friss (), ha meg szeretné adni a datetime más, mint a jelenlegi szerver idő.

Válaszolt 14/06/2012 13:02
a forrás felhasználó

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