Jag vill ha reda på hur många dagar det finns i en månad, det endaste jag vet är vilken månad jag vill veta det för. Lätt ju! Den funkar alldeles utmärkt, om det inte är skottår ;) Hej Jag läste på under tiden Sven skrev sitt inlägg, och det stämmer det Sven skrev. Det var f ö detta jag använde: (Från MSDN) Hehe, jag har precis skrivit en funktion som checkar ifall det är skottår. Det var därför jag återkom till pellesoft för att posta funktionen... Jag förstår dock inte vad (year Mod 400 ) och (year Mod 100 <> 0) är bra för. Hej Hej Hej Du behöver oxå veta vilket år det är. Rekomenderar att du använder DateAdd. Smidigt sätt att ta reda på det: >Vi måste korrigera för att dygnet inte är 24 timmar utan 23,8.. nånting.< ett år är exakt 365,25 dagar. Hej igen Datum
Finns det någon smidig vb funktion för detta?
mvh FransSv: Datum
<code>
Trettio dagar har november,
april, juni och september,
tjugoåtta en allen,
alla de övriga trettioen
</code>
Jag vet inte om det redan finns men man kan ju alltid göra en sådan funktion lätt. Om det är skottår fungerar den dock ej ty då är det 29 dagar i månad 2.
<code>
Function dagarimanad(manad As Integer) As Integer
Select Case manad
Case 1, 3, 5, 7, 8, 10, 12 'jan, mar, maj, jul, aug, okt, dec
dagarimanad = 31
Case 2 'feb
dagarimanad = 28 'OBS! 29 vid skottår
Case 4, 6, 9, 11 'apr, jun, sep, nov
dagarimanad = 30
Case Else
dagarimanad = -1
End Select
End Function
</code>
Hälsningar IvarSv: Datum
Det kanske man kunde göra något åt.. Det är ju skottår var fjärde år, när var det senast skottår?
mvh FransSv: Datum
>Det är ju skottår var fjärde år, när var det senast skottår?
En gammal programmeringsklassicer .
Ett år är ett Skottår (Leap Year) om nedanstående innehålls.
Ett år som är jämnt delbart med fyra
INTE är jämnt delbart med 100...
...om det INTE också är jämnt delbart med 400.
Skriv en enkel algoritm som funkar 100 %
mvh
SvenSv: Datum
Här kommer en funktion:
<code>
Function isleapyear(year As Integer) As Boolean
If year Mod 400 = 0 Or year Mod 4 = 0 And year Mod 100 <> 0 Then
isleapyear = True
Else
isleapyear = False
End If
End Function
</code>
Hälsningar IvarSv: Datum
1. If the year is evenly divisible by 4, go to step 2. Otherwise, go to step 5.
2. If the year is evenly divisible by 100, go to step 3. Otherwise, go to step 4.
3. If the year is evenly divisible by 400, go to step 4. Otherwise, go to step 5.
4. The year is a leap year (it has 366 days).
5. The year is not a leap year (it has 365 days).
/IvarSv: Datum
mvh FransSv: Datum
Är osäker på om det är Mod du undrar över eller om du undrar varför man gör tre test.
Det räcker alltså inte att kolla om året är jämnt delbart med 4.
Det får nämligen heller inte vara jämnt delbart med 100 OM det inte är jämnt delbart med 400.
År 2000 var ett ganska ovanligt skottår. Det dröjer 400 år (399 om
man vill vara petig) tills nästa skottår som inträffar vid ett sekelskifte
Och man måste vänta tills år 4000 om man vill uppleva nåsta skottår
som inträffar vid ett tusenårsskifte.
Mvh/OlofSv: Datum
Var tvungen att kolla min gamla algoritm ,princip samma som IT :s
>Jag förstår dock inte vad (year Mod 400 ) och (year Mod 100 <> 0) är bra för.
Därför att år 1900 var inget skottår men ändå jämnt delbart med 4
2100 är inget skottår osv osv
Private Function LeapYear(Year As Long) As Boolean
If Year Mod 4 = 0 Then
If Year Mod 100 <> 0 Or _
Year Mod 400 = 0 Then LeapYear = True
End If
End Function
mvh
SvenSv: Datum
>. Året måste vara > 1582.
Njaaa varför de ? . SkottÅr :s principen har gällt så länge
jorden snurrat runt sin egen axel och runt solen som
den gör idag.Dvs Vi måste korrigera för att dygnet inte
är 24 timmar utan 23,8.. nånting .
Redan dom gamla babylonierna visste detta
dom gjorde så att dom lade till en hel månad ,månad 13
efter ett visst antal år. För dom var 13 ett lyckotal.
Detta sätt används även idag av den judiska tidräkningen.
Förmodar att du tänker på den Julianska / Gregorianska kalendern.
I Sverige införde vi Gregorianska kalendern 1753.
den lille besserwissern i mig
mvh
SvenSv: Datum
<code>
Public Function DaysInMoth(Year As Long, Moth as Long) as Long
DaysInMoth = Day(DateSerial(Year, Moth+1, 1) - 1)
End Function
</code>
DateSerial kan hantera månad parameter 13. Tar sedan minus en dag.
Vilket ger sista datumet för angivet år och månad. Plockar ut dag.Sv: Datum
Nja, det är väl antalet dagar på året som inte är riktigt jämnt 365, och
att det är det man justerar för.
Mvh/OlofSv: Datum
Men ,25:orna lägger man på hög ocg vart fjärde år räcker dem till en hel
dag. Nämligen skottdagen den 29:februari
/peterhSv: Datum
peterh skrev >ett år är exakt 365,25 dagar.
Nix min vän, 365.2422 dygn är det korrekta.
Eftersom jordens rotationsriktning och banrörelse
sker åt samma håll kommer antal stjärndygn under ett
tropiskt år att vara 366,2422
Jorden behöver 365,2422 dygn på sig för att fullborda
ett helt varv kring solen.
365,2422 medelsoldygn = 366,2422 stjärndygn.
Stjärndygnet är således 3 min 56 sek kortare
än medelsoldygnet.
För att få en praktisk tideräkning infördes det
tropiska året. Detta för att vårdagjämningen alltid
skulle komma på samma datum (21/3).
Vårdagjämningspunkten refererar till Vädurens stjärna Aries (fixstjärna)
därav bindningen sjärndygn och medelsoldygn.
Julius Caesar införde år 45 f Kr den julianska kalendern.
Detta innebar att ett skottår med 366 dagar, infördes var 4 : år.
Årets genomsnitts längd blev därmed 365,25 dygn
jämför 365,2422 diff 11 min / år.
Av denna anledning införde man en regel att det bara fick
förekomma 97 skottår under en 400 årsperiod.(1582 Gregorius XII)
mvh
Sven