PHP date_default_timezone_set() Eastern Standard Time (EST)

Lang historie kort

Er der en officiel fn-deprecated tidszone, at PHP5 genkender for Eastern STANDARD time–ikke Eastern DAYLIGHT time?

Kort historie lang 😛

Wow, jeg kan ikke tro, at PHP gør sådan en klynge-floogen ud af indstilling af tid.

Jeg vil gerne bruge PHP5 er date_default_timezone_set() til at indstille tidszonen for mit script. Jeg ønsker at bruge standard tid. Jeg ikke ønsker, at mit script til at observere sommertid. Jeg ønsker ikke at være nødt til at bruge gmtime() og trække 60*60*5 sekunder, hver gang min programmet skriver en tid. Jeg ønsker ikke at spare denne værdi til en variabel. Indstilling standard tidszone, der er mere elegant og gør scriptet mere bærbare til andre servere og lokaliteter.

Desværre PHP kræver, at jeg bruger en af deres dumme “officielle tidszoner”, når du indstiller standard tidszone. Der er en “America/New_York” men jeg har ingen idé om det eller et af de officielle PHP tidszoner observere Sommertid. Gennem eksperimenter, har jeg opdaget, at “America/New_York” gør observer DST. “America/Panama” er EST og dermed ikke observer DST… men hvad nu hvis Panama nogensinde skulle skifte mening om SOMMERTID i fremtiden? (De observerede DST i 1908)

Fordi Panama kan altid ændre deres sind; jeg ønsker blot at bruge GMT eller UTC offset.

Så er der det…

http://us.php.net/manual/en/timezones.others.php

Ovenstående link liste, hvad jeg antager er deprecated tidszoner. “EST” er i der, men er meget USA-centreret, så jeg forstår, hvorfor det er deprecated. “Ect/GMT-5” er der også, og jeg har absolut ingen idé om, hvorfor der er deprecated. Hvis du spørger mig, alle stednavne tidszoner bør være forældet, og tidszoner GMT fn-deprecated… men få dette… “Ect/GMT-5” er faktisk forkert! Jeg var nødt til at bruge “Ect/GMT+5” for at få USA ‘ s Eastern Standard Time. Jeg er temmelig sikker på jeg ikke er 5 timer foran England her på østkysten.

Besvaret?

Ingen rigtig har besvaret spørgsmålet. Så jeg tror jeg vil besvare det selv. “Nej, der er ingen, fn-deprecated tidszone, at PHP5 genkender for Eastern STANDARD time”

En masse folk fortalte mig, at jeg, der bør gemmer datoer som UTC-tid og oversætte dem til den lokale tid, når jeg trækker dem ud af opbevaring–noget, jeg allerede kender. Problemet er, at jeg er ansat til kun at løse dette lille del af scriptet, og jeg tvivler på, at den fyr er tænkt mig at lade mig skrive hele hans kode, som han har været anvendt siden begyndelsen af PHP angiveligt.

Jeg vil nødigt give kredit til den fyr, der viser dig, hvordan du korrekt gemme og hente gange så fremover folk, der søger til denne lære, hvordan du gør dette den rigtige måde.

Nogle gange er du bare nødt til at sejle op og ned og bruge noget, du ikke er “meningen”. Jeg vil foreslå “OS/Østlige’ en, men jeg ved ikke, om der omfatter DST eller ikke. UTC/Etc dem, helt sikkert vil ikke
Hvad er formålet med at tvinge EST? Måske er der en bedre måde helt af at løse problemet.
Er nødt til at bruge EST. Jeg har ikke adgang til resten af scriptet. Jeg er en entreprenør, der arver en andens gamle php4 fejl i php5.

OriginalForfatteren mrbinky3000 | 2011-04-05

5 svar

  1. 19

    De ting, du ønsker at gøre, er ikke praktisk muligt og vil medføre, at dine brugere med at hade dig.

    Hele årsagen til den angivne tidszoner er til præcist at repræsentere lokal tid. Repræsenterer “Standard” tid som en lokal tid når det lokale område er inde i DST er objektivt forkert. Nogen inde, der tidszone, der læser den tid kommer til at blive misinformeret.

    Hvis du har brug for til at gemme og arbejde med datoer og tidspunkter, der ignorerer tidszoner, så brug UTC til dette formål, dvs opbevaring og normal matematik. Det er værd at huske, at selv de gode gamle Unix timestamp er “sekunder over midnat, januar 1, 1970, UTC“.

    Hvis du har brug for til at repræsentere tider lokale til brugeren, så skal du give dem mulighed for at vælge deres lokale tidszone, og konvertere det på displayet. Moderne PHP ‘ s DateTime og DateTimeZone gøre dette døde simpelt. Fra den interaktive prompt:

    php > $utc = new DateTimeZone('UTC');
    php > $amla = new DateTimeZone('America/Los_Angeles');
    php >
    php > $two_past_midnight = new DateTime('2011-04-05 00:02', $utc);
    php > $two_past_midnight->setTimeZone($amla);
    php > echo $two_past_midnight->format('Y-m-d H:i:s');
    2011-04-04 17:02:00

    Ingen rod, ingen ståhej. Det tog sig af matematik til os, når vi skiftede tidszone.


    I alternativ, hvis du virkelig, virkelig, virkelig ønsker at flade ud DST tidszoner, at se på getTransitions og getOffset i kombination med de forskellige tidszone date() formater, I i særdeleshed. Du kan knibe på de fremkomne oplysninger at finde, når “standard” version af DST område ved overgange og justere det i overensstemmelse hermed. Husk, at forskellige områder overgang på forskellige tidspunkter, og ikke alle områder overgangen af den samme mængde … og nogle ikke gør overgangen på alle. Jeg tror der er nogen, der er nævnt i Indiana allerede.

    Normalt ville jeg også give eksempler på kode her, men dato matematik fylder mig med en umættelig tørst efter vold. Hvem besluttede, at 60, 60, 24, 7, 4-6, 12 og 52 var acceptable måder at tænke på, tidspunkter og datoer, der var onde, onde mennesker. Heldigvis har de alle været døde i mellem hundreder og tusinder af år.

    +1 for at være i stand til at vise i kode, hvad jeg prøvede at forklare på engelsk
    Jeg er enig med dig 100%. Jeg har altid gemme tider i UTC og konvertere til den lokale tid. Men jeg arbejder på en del af et script til en kunde, og ikke har adgang til resten af webstedet. De bosatte sig på ved hjælp af EST (som ikke observer DST) for at gemme alle deres gange. Derfor min overraskelse, da jeg fandt, at det var så svært at sætte en standard tidszone til Eastern Standard Time. Det er ligesom det blev udslettet af den PHP-kort. Jeg tror ingen steder i Amerika bemærker GMT-5 (EST) tid længere. Tak meget, selv om.
    Hvordan er de at omgå de automatiske konvertering af “Standard” til “Dagslys”? Forskellige teknologi-stakken? Forhistorisk PHP? Hvis du sidder fast med sutter, overveje, falder tilbage til almindelig gammel Unix tidsstempler i stedet for at bruge den moderne DateTime system. Du kan manuelt gøre det 5 timers subtraktion fra det uden alt for meget besvær, hvis du kan overbevise PHP, at det kører i UTC.
    De var ikke onde mennesker, det er bare fundamentalt lettere for gamle mennesker (ligesom Sumererne, der opfandt den moderne tid) til at lave matematik i 12 s.
    Ah, men det er ikke de tolv, der er problemet, det er den 7’ere og 4-6s, og den 29-31s og alle de andre standard ikke-ensartet-delelig lort…

    OriginalForfatteren Charles

  2. 1

    America/New_York gør observer DST, og er den anbefalede tidszone. (Jeg gik til en konference sidste år, hvor Derick Rethans, der skrev en masse af dato/tid kode, talte.) Ideen bag den regionale tidszoner er, at de adlyder den tidszone regler for by/region, de betegner (hvilket er grunden til der er 7 Indiana tidszoner).

    Jeg ikke wan ‘ t DST. Jeg ønsker, normaltid. 🙁
    Undskyld, jeg misforstår, at en del af dine spørgsmål. Hvis du er imod at bruge en forældet tidszone ville jeg foreslå at du bruger UTC og manuelt tilføje offset, du ønsker. Er der en grund til du ønsker at undgå DST, at jeg mangler?

    OriginalForfatteren Jimmy Sawczuk

  3. 1
    echo ' Format ' . date('m/d/Y H:i:s a') ;
    <br/>//maketime function- mktime(hour,minute,second,month,day,year,is_dst)
    <br/>$EasternTimeStamp =mktime(date('H')-6,date('i'),date('s'),date("m"),date("d"),date("Y"));
    <br/>//date function- date(format, timestamp)
    <br/>echo 'Format ' . date('m/d/Y H:i:s a',$EasternTimeStamp) ;

    OriginalForfatteren steve

  4. 0

    Du bør altid opbevares gange bruger UTC, hvilket er, hvad time() vender tilbage, skal du indstille den tidszone, der er baseret på placeringen af den server, som vil blive opdateret til SOMMERTID, hvis det er relevant.

    time() ikke rigtig bruge UTC. Det er kun antallet af sekunder, da et fast punkt i tid (hvilket sker for at være baseret på UTC). Men jeg er enig i, at gemme datoer via gmdate() eller time() er generelt den bedste metode.
    Jeg er enig. Gange bør kun opbevares, så UTC. Men jeg er bare en lille arbejdstager bi opdatering af en andens manuskript og ikke har myndighed til at opdatere resten af sitet. Derfor mit ønske om at skrive tider som EST og ikke EDT. Tak selv.

    OriginalForfatteren Adam Hopkinson

  5. 0

    Godt, hvis du virkelig ønsker X timer før eller efter en UTC-dato, ville jeg gøre dette:

    $now = gmdate('Y-m-d H:i:s', time() - 3600 * $hours);

    I dit tilfælde, $hours ville være 5, tror jeg.

    Som andre har foreslået, inklusive mig selv, det er ikke god praksis… Men du er klar over det.

    Måske er det det, du sagde, at du ikke ønsker at gøre. Du har brugt gmtime, som du måske betød gmdate. Uanset, det er den tilgang, jeg vil bruge, hvis du ønsker at gøre sikker på, at scriptet fungerer på denne måde. Pak det ind i en funktion som standard_date(), der læser $hours fra en config.

    OriginalForfatteren Matthew

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *