Avatar billede brevkasserne Nybegynder
08. august 2003 - 23:05 Der 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???

Nogen der kan følge mig?
Avatar billede nikolajdu Nybegynder
08. august 2003 - 23:11 #1
Hvorfor gemmer du ikke bare din dato som DATE eller DATETIME så kan du kovertere til dansk efter behov....?
Avatar billede brevkasserne Nybegynder
08. august 2003 - 23:14 #2
Jeg skal slet ikke bruge dansk tid, kun den bedste til en international side, hvilket vel er GMT, ikke?

Jeg har en kæmpe DB med en masse tider gemt i dansk tid, så jeg kan ikke lave det om nu!
Avatar billede nikolajdu Nybegynder
08. august 2003 - 23:20 #3
Næh så er du vel nødt til at sende klientens tid med og her er det langt fra sikkert at uret går rigtigt.
Avatar billede brevkasserne Nybegynder
08. august 2003 - 23:27 #4
Jamen kan gmdate() ikke automatisk lave den om som jeg har gemt i DB'en til GMT???

Eller hvordan virker gmdate?
Avatar billede brevkasserne Nybegynder
08. august 2003 - 23:27 #5
Sådan så jeg kun gemmer i serveren tid, altså dansk her. Men så når den udskrives så bliver det i GMT!!!
Avatar billede kimg Nybegynder
09. august 2003 - 10:07 #6
jeg havde samme problem, jeg løste det med explode();

$convert_date = "$dansk[dato]";
$ny_dato = explode("-",$convert_date);
$new_dato = "$ny_dato[0]-$ny_dato[1]-$ny_dato[2]";

Men det kan der godt være at der findes en smart funktion.

Kim
Avatar billede detox Nybegynder
09. august 2003 - 10:50 #7
Da dine datoer er gemt i 'dansk tid' (GMT +0200), kan du konvertere dem til GMT ved at trække 2 timer fra. Fx:

return date('F d, Y - h:i:s A \G\M\T', strtotime($str)-7200);
Avatar billede nicklasb Nybegynder
09. august 2003 - 13:04 #8
just a note;

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) ?
Avatar billede detox Nybegynder
09. august 2003 - 14:33 #9
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.
Avatar billede nicklasb Nybegynder
09. august 2003 - 15:19 #10
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
Avatar billede detox Nybegynder
09. august 2003 - 15:28 #11
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.
Avatar billede brevkasserne Nybegynder
11. august 2003 - 19:04 #12
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?
Avatar billede brevkasserne Nybegynder
11. august 2003 - 19:05 #13
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?
Avatar billede koldstar Nybegynder
11. august 2003 - 19:08 #14
jo, det vil blive UNIXTIMESTAMP i danks tid...
Avatar billede koldstar Nybegynder
11. august 2003 - 19:09 #15
der er heller ingen grund til at konvertere om. du kan jo bare trække en time fra din danske tid når du skal skrive den ud.
Avatar billede detox Nybegynder
11. august 2003 - 19:56 #16
Hvordan ser dit nuværende datoformat helt nøjagtigt ud?
Avatar billede brevkasserne Nybegynder
11. august 2003 - 21:41 #17
0000-00-00 00:00:00, altså år-måned-dag time:minut:sekund
Det hele ligger på en dansk server så derfor er alle datoer gemt i dansk tid!

Det er en international side, så hvad skal jeg gøre med hensyn til datoen?
Avatar billede detox Nybegynder
12. august 2003 - 09:27 #18
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);
Avatar billede brevkasserne Nybegynder
15. august 2003 - 09:18 #19
Hvis jeg nu vil ændre denne php-function som jeg benytter nu:

return date('F d, Y - h:i:s A', strtotime($str));

til at vise tiden i GMT-format, satm tage højde for sommertiden, hvad skal jeg så gøre!?
Avatar billede detox Nybegynder
15. august 2003 - 09:25 #20
Sådan her fx:

$sommer = date('I', strtotime($str))*3600;
return date('F d, Y - h:i:s A \G\M\T', strtotime($str)-$sommer-3600);
Avatar billede brevkasserne Nybegynder
18. august 2003 - 19:48 #21
`--> detox, hvis du er helt sikker på at den sidste function fungerer perfekt så lav et svar ;-)
Avatar billede detox Nybegynder
18. august 2003 - 20:02 #22
Her er beviset:

<?php
$str = date('Y-m-d H:i:s', time());
echo GMT($str) . "<br />"; //Test funktion GMT
echo gmdate('F d, Y - h:i:s A \G\M\T', time());
//GMT Funktion, fodres med dansk tid
function GMT($str) {
$sommer = date('I', strtotime($str))*3600;
return date('F d, Y - h:i:s A \G\M\T', strtotime($str)-$sommer-3600);
}//END Funktion GMT
?>
Avatar billede detox Nybegynder
18. august 2003 - 20:11 #23
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').
Avatar billede detox Nybegynder
18. august 2003 - 20:14 #24
Her kan du se hvilke steder der er sommertid:
http://www.timeanddate.com/worldclock/
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester