08. august 2003 - 23:05Der er
23 kommentarer og 1 løsning
International side med dato!
Jeg har en international side kørende som kører på en dansk server! Her bliver alle datoer jo gemt i dansk tid og jeg formatere datoen med denne function:
return date('F d, Y - h:i:s A', strtotime($str));
Skal jeg istedet bruge gmdate så den hedder:
return gmdate('F d, Y - h:i:s A', strtotime($str)); }
da det jo er en international side eller hvordan løser jeg mit datoproblem???
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Vi er da ikke i GMT +02.00 ?!? Ligger i ikke i GMT +01.00, sammen med Paris Oslo og alle de andre i denne grad?? GMT +2.00 er da så vidt jeg ved i Helsinki (Rusland, og deromkring) ?
nicklasb -> Jo, selvfølgelig fuldstændig korrekt. Det er sommertiden der driller. Det gør jo sagen noget mere kringlet. Jeg vil næsten sige uanset hvor stor din database er vil du gøre dig selv en stor tjeneste at indsætte det rette datoformat, hvis du overhovedet har mulighed for det. Du kunne måske lave en ekstra kolonne med fx DATETIME typen, hvor du lægger den rette GMT dato/tid. Nu mener jeg naturligvis ikke manuelt (den slags har man jo funktioner til). Ellers skal du ud i at tjekke datoerne for sommertid. Noget lign.:
$sommer = date('I', strtotime($str))*3600; return date('F d, Y - h:i:s A \G\M\T', strtotime($str)-$sommer-3600);
gmdate() vil kun fungerer på 'danske' datoer, så længe man er i den rette tidszone.
Du kunne jo saktens lave det om til et UnixTimeStamp hvis du ville.. Du kunne jo bare tilføje en ny kollonne kaldet 'timestamp', sætte den til int, og med et standardinhold lig med nul.. Du kunne så køre alle dataene igennem med noget ligende: UPDATE tabelnavn SET timestamp = UNIXTIMESTAMP(datofelt) WHERE timestamp = 0 Er ikke lige testet.. Men idéen er der. Når du nu har dette kan du jo så evt i samme streng plusse de fornødne sekunder, eller evt gøre det ved udtræk.
og så er det vel ikke SÅ svært igen at finde ud af om det er sommetid eller ej. Der kan du bare spørge på et I (stort i) i en date-funktion ;D
nicklasb -> Problemet som jeg forstår det, er at datoen ikke lægger i et brugbart format i databasen. Og jeg er ikke sikker på, hvordan: $sommer = date('I', strtotime($str))*3600; vil reagere i lande udenfor sommertidszonen. Ikke desto mindre hælder jeg mest til at opdatere databasen.
Hvis jeg nu opdatere alle mine datoer (som er danske datoer) til UNIXTIMESTAMP, hvad skal jeg så gøre når jeg udskriver dem på siden, hvilken function skal jeg bruge?
Og når jeg nu opdaterer tiden til UNIXTIMESTAMP fra en dansk dato, vil det så ikke blive noget UNIXTIMESTAMP i dansk tid??? Eller findes der kun en tid i UNIXTIMESTAMP, håber nogen kan følge mig?
Jeg synes det rigtige vil være at beholde dit datetime format, men ændre tiderne til GMT. Det kringlede er jo sommertiden, da jeg ikke mener der er mulighed for et tjekke det direkte i MySQL. For så vidt angår datoer for i år, kan man konvertere direkte i MySQL fx sådan her:
UPDATE tabel SET tid = IF ( DAYOFYEAR ( tid ) BETWEEN 90 AND 299 , tid - INTERVAL 2 HOUR , tid - INTERVAL 1 HOUR ) WHERE YEAR(tid)=2003;
Men går dine datoer flere år tilbage er det ikke en brugbar løsning, da dagene jo vil ændre sig hvert år. Så er der nok ingen vej uden om en tur forbi php, hvor man til gengæld let vil kunne tjekke for sommertid med date('I', $tid);
PS: Jeg ved ganske vidst ikke hvordan den vil reagere i fx Australien, hvor 'sommertid' må være en helt anden periode (hvis de i det hele taget har 'sommertid').
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.