Avatar billede shifter Nybegynder
19. maj 2000 - 17:28 Der er 9 kommentarer og
1 løsning

Tilpas datoen

Hej!

I et uhyre simpelt script udskrives en side afhængig af hvilken dag det er. Nu ligger min hjemmeside desværre på en amerikansk server, så dagen skifter for tidligt (elller er det for sent) i forhold til Danmark.

Hvordan får jeg tilpasset datoen, så det passer til danske forhold?

Koden er her:

#!/usr/bin/perl
$thisday = (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[(localtime)[6]];

print "Content-type: text/html\n\n";

if ($thisday eq "Sun") {
print <<ENDPAGE;

Sunday's Message
   
ENDPAGE
    }
   
elsif ($thisday eq "Mon") {

print <<ENDPAGE;

Monday's Message
   
ENDPAGE
}
elsif ($thisday eq "Tue") {

print <<ENDPAGE;

Tuesday's Message
   
ENDPAGE
   
    }
elsif ($thisday eq "Wed") {
print <<ENDPAGE;

Wednesday's Message
   
ENDPAGE
    }
elsif ($thisday eq "Thu") {
print <<ENDPAGE;

Thursday's Message
   
ENDPAGE
    }
elsif ($thisday eq "Fri") {
print <<ENDPAGE;

Friday's Message
   
ENDPAGE
    }
elsif ($thisday eq "Sat") {
print <<ENDPAGE;

Saturday's Message
   
ENDPAGE
    }
Avatar billede erikjacobsen Ekspert
19. maj 2000 - 19:59 #1
Brug gmtime i stedet for localtime. Den giver ganske vist ikke dansk tid, men GMT
(Greenwich Mean Time), som er 1 eller 2 timer ved siden af Danmark. Jeg har en
stump PHP-kode, hvor jeg hvert år blot skal ændre start- og slut-dato for sommertiden,
og måske du kan blive inspireret af det.

$dagsdato = gmdate("Y-m-d-H-i-s",time());  // E.g. 2000-02-04
if ('2000-03-26-01-00-00'<=$dagsdato && $dagsdato<'2000-10-29-01-00-00') {
  $korrektion=60*60*2;
} else {
  $korrektion=60*60*1;
}
$dagsdato = gmdate("Y-m-d",time()+$korrektion);  // E.g. 2000-02-04
Avatar billede shifter Nybegynder
19. maj 2000 - 20:10 #2
hmm... ikke inspireret nok ihvertfald... Jeg kan ikke lige se, hvordan jeg skal kunne overføre det til perl
Avatar billede erikjacobsen Ekspert
19. maj 2000 - 21:55 #3
Ok - nu er jeg i al beskeden ekspert i Perl (hoho), så mon ikke jeg lige kunne strikke det
sammen. Men lad mig lige få min datter i seng først.
Avatar billede erikjacobsen Ekspert
19. maj 2000 - 22:28 #4
I nedenstående skal du hvert år ind og skrive de nye datoer for sommertid
start og slut. Sommertidstart er 2000032601 (og de 01 skal altid være 01, for
sommertid skifter altid når klokken er 01 GMT) og slut er 2000102901 (samme
kommentar for 01). Jeg ville ikke tro på at en amerikansk server ved noget
om dansk (undskyld: europæisk) sommertid. Grunden til at jeg kunne vise dig
koden i PHP er at jeg selv har præcis samme problem med min amerikanske
server. Det er rudimentært testet, men leveres uden ansvar.... ;-)

@dag = gmtime();
$dagsdato=($dag[5]+1900)*1000000+$dag[4]*10000+$dag[3]*100+$dag[2];
$ugedag=$dag[6]%7;
if (2000032601<=$dagsdato && $dagsdato<2000102901) {
  if ($dag[2]>=22) {
    $ugedag = ($ugedag+1)%7;
  }
} else {
  if ($dag[2]>=23) {
    $ugedag = ($ugedag+1)%7;
  }
}

if ($ugedag==0) {
  print "Søndag\n";
} elsif ($ugedag==1) {
  print "Mandag\n";
} elsif ($ugedag==2) {
  print "Tirsdag\n";
} elsif ($ugedag==3) {
  print "Onsdag\n";
} elsif ($ugedag==4) {
  print "Torsdag\n";
} elsif ($ugedag==5) {
  print "Fredag\n";
} elsif ($ugedag==6) {
  print "Lørdag\n";
}
Avatar billede shifter Nybegynder
20. maj 2000 - 13:01 #5
Well... det du har lavet virker fuldkomment som det gamle script. Jeg får at vide det er søndag, selvom det er lørdag. Hvor kan man korrigere tiden tilbage henne?

Jeg tror (men ved ikke med sikkerhed), at serveren er 6-8 timer foran.

Avatar billede erikjacobsen Ekspert
21. maj 2000 - 00:13 #6
Interessant. Vi har just passeret midnat, som du kan se, og nu har jeg faktisk
afprøvet den hos min udbyder i ca. samme tidszone som din. Og lige før midnat
var det lørdag, og lige efter var det søndag. Perfekt.

Har din udbyder styr på GMT-tid? Prøv at udføre:

  @dag = gmtime(); print join(" ",@dag);

på din udbyder. Den kan skrive:

  41 5 22 20 4 100 6 140 0

som tegn på at det er kl. 22:05:41 GMT den 20. maj (!!) 100+1900=2000.

4 tallet i linien snød mig for Perl tæller måneder fra 0 (=januar). Skriver den ikke noget
der er to timer fra dansk sommertid er det din udbyder, det er galt med.

Det med 4-tallet vidste jeg jo godt, så det rigtig script skal laves om til:

$dagsdato=($dag[5]+1900)*1000000+($dag[4]+1)*10000+$dag[3]*100+$dag[2];
$ugedag=$dag[6];

(der er ændrig i begge linier, i nummer 2 fordi %7 er overflødigt). Denne ændring mht.
maaneden har dog ingen betydning for vore eksperimenter lige nu.
Avatar billede shifter Nybegynder
21. maj 2000 - 10:27 #7
Det VAR min udbyder, den er gal med.

Jeg har netop fået tilbagemeldingen:

6 19 1 22 4 100 1 142 0

Hvilket jo tydeligt indikerer, at der er noget i vejen. Kl. skulle altså eftersigende være 1:19:06 om mandagen.

Nu er min amerikanske udbyder ikke nem at få fat i, så hvis du kan lave en korrektion, så den trækker antallet af timer fra, så putter jeg yderligere 200 points oven i hatten! :)
Avatar billede erikjacobsen Ekspert
21. maj 2000 - 18:46 #8
Ja, den er gal, rivende gal.... Jeg forudsætter du prøvede det her til formiddag ca. kl. 10:19.

Nu bliver du nok nødt til selv at eksperimentere, så skidt med de ekstra points. Hvis det
kun var tidspunktet, der var galt, skulle du bare ændre tallene 22 og 23, som der
bliver sammenlignet med i mit script, med noget andet, formentlig trække 4-7 timer fra.
Men det er også dagen. Så må du jo skifte ugedagene ud med det du ser,
der passer, når tallene bliver 0,1,...,6. Men altså - når de så en dag korrigerer det,
så det passer, så er du på Herrens mark igen.

Hvad er det dog for en udbyder? Må jeg anbefale en anden, ;-) ?
Avatar billede shifter Nybegynder
22. maj 2000 - 00:30 #9
Så fik jeg det til at lykkes! Når klokken var 23 søndag, var klokken 16 mandag "over there". Jeg korrigerede det ved at lave lidt om i scripet.

Først trak jeg en dag fra, så vi kom tilbage til søndag:

$ugedag=($dag[6]-1)%7;

Derefter korrigerede jeg timetallet:

if (2000032601<=$dagsdato && $dagsdato<2000102901) {
  if ($dag[2]>=17) {
    $ugedag = ($ugedag+1)%7;
  }
} else {
  if ($dag[2]>=18) {
    $ugedag = ($ugedag+1)%7;
  }
}

Tusind tak for hjælpen!
Avatar billede erikjacobsen Ekspert
22. maj 2000 - 00:39 #10
For at undgå problemer med negative tal vil jeg anbefale dig
at skrive:

  $ugedag=($dag[6]+6)%7;

Men hold nu øje med om de finder ud af det der med tiden. hehe ;-)
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
Kurser inden for grundlæggende programmering

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