Avatar billede terra Nybegynder
14. oktober 2003 - 18:45 Der er 13 kommentarer og
1 løsning

$day + 1

Jeg skal lave et CGI med:

$dagIdag = $day;
$dagEfter= $day + 1;
$SisteDag= $day + 2;

Den går greit ;) if !...:
if $day != 30 || $day != 31
Da den giver ikke korrekt tall (31,32,33)
istedenfor begynne på nytt fra neste måned
Er det noen som kan hjelpe her?
Avatar billede tjp Mester
15. oktober 2003 - 03:43 #1
Jeg forstår ikke helt dit spørgsmål - ønsker du at starte forfra fra 1, når du når til slutningen af måneden? I så fald vil $dag lig med 28 eller 29 også give et problem for februar. Men $day %$månedslængde er vejen frem.
Avatar billede terra Nybegynder
15. oktober 2003 - 17:26 #2
Hei tjp,
Ja, jeg skal begynne forfra fra dag 1, er klar over februar, den krever vel et eget oppsett for 28 og 29 dager.
Avatar billede tjp Mester
15. oktober 2003 - 21:04 #3
Så kunne en løsning være noget i stil med:

$dagIdag = $day;
$dagEfter= ($day % $lengthOfMonth) + 1;
$SisteDag= ($day % $lengthOfMonth) + 2;

hvor $lengthOfMonth rummer den givne måneds længde. % er modulo, dvs. rest efter heltalsdivision.
Avatar billede terra Nybegynder
15. oktober 2003 - 23:45 #4
$SisteDag= ($day % 30) + 20;
= 35 idag. Den giver ikke korrekt dag ...
Avatar billede tjp Mester
16. oktober 2003 - 00:44 #5
Du sagde ikke noget om at lægge 20 til! *S*

Men ændr rækkefølgen lidt:

$dagIdag = $day;
$dagEfter= ($day + 1) % $lengthOfMonth;
$SisteDag= ($day + 2) % $lengthOfMonth;
...
$AllerSisteDag= ($day + 20) % $lengthOfMonth;

Det burde virke, men du må selv holde rede på hvor mange måneder, der er gået. ;-)
Avatar billede terra Nybegynder
16. oktober 2003 - 01:15 #6
Vi er ganske nær her -> tjp
Men ..., den starter fra -> 0 i neste måned
Se:
$AllerSisteDag= ($day + 14) % 30;
print "$AllerSisteDag\n"; #;)
Any ideas?
Avatar billede tjp Mester
16. oktober 2003 - 23:44 #7
Øv! Det er nok derfor dataloger og andet godtfolk elsker at starte fra 0. *S*

Vi prøver igen:

$dagIdag = $day;
$tmpDay= $day - 1;
$dagEfter= (($tmpDay + 1) % $lengthOfMonth)+1;
$SisteDag= (($tmpDay + 2) % $lengthOfMonth)+1;
...
$AllerSisteDag= (($tmpDay + 20) % $lengthOfMonth)+1;
Avatar billede terra Nybegynder
19. oktober 2003 - 01:39 #8
Tusind tak for hjelpen -> tjp :)
Har lavet et $lengthOfMonth form og alt virker perfect nu.

Er de noe som jeg kan gjøre med skuddårsdag -> $leapDay ?
Kan jeg sette opp noe for den?
Avatar billede tjp Mester
19. oktober 2003 - 01:53 #9
Velbekomme og tak for point.
Jeg forstår ikke helt hvad du mener med 'et $lengthOfMonth form' - taster brugeren selv månedslængden ind?
Ang. skudår - hvis du ved hvilket år, der er tale om, kan du jo udregne om det er skudår eller ej.
Avatar billede terra Nybegynder
19. oktober 2003 - 03:13 #10
Nej, $lengthOfMonth kommer selv ;)
Det med skudår så var det sist i 2000 og kommer hver 4 år.
så...:

my $year = $year + 1900;
if ($year == 2004 || $year == 2008 && $month == 1){
  $llenghtOfMonth = 29;
  }else{
  $llenghtOfMonth = 28; # her putter jeg også 'else' 30 og 31
  }

Har du noe mer optimal for det: 2000 + 4 ... isteden for at skrive:
if ($year == 2004 || $year == 2008 || $year == 2012 .....
Avatar billede terra Nybegynder
19. oktober 2003 - 03:16 #11
$llenghtOfMonth=$lenghtOfMonth; #;)
Avatar billede terra Nybegynder
19. oktober 2003 - 03:25 #12
if (($year == 2004 || $year == 2008) && $month == 1){
er vel mer korrekt ;)
Avatar billede tjp Mester
19. oktober 2003 - 04:05 #13
Hvis programmet kun skal virke de næste 96 år (da århundreder ikke er skudår medmindre de kan deles med 400):
if (($year % 4 == 0)&& $month == 1){...}
Avatar billede terra Nybegynder
19. oktober 2003 - 11:45 #14
Tak for det -> tjp.
Tror ikke jeg skal leve så lenge ;)
Ha en fin dag.

Terra.
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