07. januar 2003 - 21:14Der er
19 kommentarer og 1 løsning
Måneder i anden rækkefølge
Hej, hvis jeg har variablen $m der indeholder måneden (et tal fra 1 til 12), og jeg skal have lavet om i rækkefølgen så 1 = marts, 2 = april og så videre? OK måske svært at forstå, prøver at uddybe det lidt :)
$m skal omdannes til et tal mellem 3 og 14 (istedet for 1-12). Hvis $m = 1 skal den laves om til 14, er $m = 2 skal den laves om til 13, er $m = 3 skal den laves om til 1, er $m = 4 skal den laves om til 2 og så videre.
Kan ikke lige regne ud hvordan det gøres, selvom det vel er ganske simpelt når man ved det :) Og nej, jeg vil ikke bruge en IF-ELSE løsning, må kunne gøres med en formel af en art.
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.
jeg forstår ikke hvad du mener??? paa den ene side siger du, at "$m skal omdannes til et tal mellem 3 og 14" og paa den anden side siger du at "er $m = 3 skal den laves om til 1". Det er lidt selvmodsigende, saa kunne du ikke forklare lidt bedre, evt. stille alle 'omregningerne' op?
Ja det kan jeg kun give dig ret i, men er selv lidt forvirret over den, og kom vist til at vrøvle :) Jeg omformulerer den lige, så den skulle være korrekt
$m skal omdannes til et tal mellem 3 og 14 (istedet for 1-12). Hvis $m = 1 skal den laves om til 14, er $m = 2 skal den laves om til 13, er $m = 3-12 skal den ikke laves om.
Jeg er da godt nok lidt for forvirret... Vi prøver på en anden måde, for jeg kan slet ikke tænke i dag... Her er et link til det jeg forsøger at omskrive til PHP
jeg er lidt ked af at de to første værdier 'tæller nedad' når resten tæller opad. er du sikker på det du vil have ikke er: 1 -> 13, 2 -> 14, 3 -> 3, 4 -> 4, ... der rækkefølge kan laves ret nemt med: $nym = ( ( 9 + $m ) % 12 ) + 3;
JakobA > Jeg tør snart ikke sige hvad jeg er sikker på, i hvert fald ikke i dag, synes det blev forvirrende nok :) Men du kan jo tage et kig på mit link tidligere, jeg håber jeg har forstået det korrekt, og det ser også ud til at det virker sådan som jeg har forstået det.
Det er i denne forklaring jeg mener at kunne læse at måneden skal transformeres
"där [x] betecknar heltalsdelen av x, v är veckodagen (0=söndag, 1=måndag osv), d dagen, m måndaden (1=mars, 2=april osv), y de två sista siffrorna i årtalet och c århundradet."
Helt præcist denne del "m måndaden (1=mars, 2=april osv)", så vidt jeg kan læse (på trods af at mit svenske er ret dårligt :), starter den med marts og ikke januar som man vel normalt ville gøre
Tja, dette er så et underligt forsøg på at stille det logisk op, hvilket bare gjorde mig mere forvirret, muligvis har du ret, jeg vil straks lave en lidt mere omfattende test for at få det afklaret :)
1 -> Marts (normalt 3) 2 -> April (normalt 4) 3 -> Maj (normalt 5) 4 -> Juni (normalt 6) 5 -> Juli (normalt 7) 6 -> August (normalt 8) 7 -> September (normalt 9) 8 -> Oktober (normalt 10) 9 -> November (normalt 11) 10 -> December (normalt 12) 11 -> Januar (normalt 1) 12 -> Februar (normalt 2)
OK, ingen af delene virker helt korrekt... Dette er så min kode nu, og hvis du selv prøver, kan du se at de 2 tal den printer ud ikke er ens, hvilket de vel burde være
De ser i hvert fald ud til at give samme resultat begge 2.
Men hvorfor virker det så ikke? Enten har vi gjort noget galt, eller også er folkene bag PHP galt på den, jeg tror mest oå det første, ved ikke helt hvorfor :)
Jeg har også selv søgt lidt... Det er dog ikke meget man finder på google om emnet. Det lykkedes mig dog at finde et eksempel i Perl og et i C++ men de virkede heller ikke optimalt. Ligeledes viser det sig at zellers også er brugt i et PEAR projekt, men det virker heller ikke helt optimalt, rent faktisk løb jeg ind i de samme problemer med alle 3 scripts... Enten ville det ikke virke for januar og februar, eller også ville det ikke virke hvis det 3. ciffer i årstallet er et 0 (f.eks. 1909 og 2002) om man kan løse det problem ved jeg ikke, men det kunne gå hen og blive svært når en sådan "fejl" umidelbart accepteres.
Eneste mulighed jeg lige kan se er at få fat i PHP-sourcen og grave sig igennem den, til man finder frem til hvordan de har gjort, og så kan det jo næsten være ligemeget :) Hvis vi altså tror på at PHP-teamet har fået udviklet en fejlfri metode :)
Der er en rimelig god forklaring, samt et BASIC program (ved dog ikke om det virker). Der står også at for januar og februar skal der trække 1 fra årstallet.
Det lykkedes mig endelig at tage mig sammen og få kigget på det igen, og jeg har formået at få det til at virke. Følgende funktion har jeg testet med alle datoer fra 1970 - 2003 uden fejl, så jeg tør vidst godt sige at den virker nu :)
Ville bare lige poste det, hvis andre skulle sidde med samme problem
function zellers( $d, $m, $y ) { $m -= 2 ; // Subtract two from month?
switch( $f ) { case 0 : return "Sunday" ; break ; case 1 : return "Monday" ; break ; case 2 : return "Tuesday" ; break ; case 3 : return "Wednesday" ; break ; case 4 : return "Thursday" ; break ; case 5 : return "Friday" ; break ; case 6 : return "Saturday" ; break ; } }
Synes godt om
Ny brugerNybegynder
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.