Jeg har en liste over de uger som skulle passe (uge 53):
År 2000 uge 53 starter Mandag den 25 <- 53 År 2001 uge 52 starter Mandag den 24 År 2002 uge 52 starter Mandag den 23 År 2003 uge 52 starter Mandag den 22 År 2004 uge 52 starter Mandag den 20 År 2005 uge 52 starter Mandag den 19 År 2006 uge 53 starter Mandag den 18 <- 53 År 2007 uge 52 starter Mandag den 24 År 2008 uge 52 starter Mandag den 22 År 2009 uge 52 starter Mandag den 21 År 2010 uge 52 starter Mandag den 20 År 2011 uge 52 starter Mandag den 19 År 2012 uge 53 starter Mandag den 24 <- 53 År 2013 uge 52 starter Mandag den 23 År 2014 uge 52 starter Mandag den 22 År 2015 uge 52 starter Mandag den 21 År 2016 uge 52 starter Mandag den 19 År 2017 uge 52 starter Mandag den 18 År 2018 uge 52 starter Mandag den 24 År 2019 uge 52 starter Mandag den 23 År 2020 uge 52 starter Mandag den 21 År 2021 uge 52 starter Mandag den 20 År 2022 uge 52 starter Mandag den 19 År 2023 uge 53 starter Mandag den 25 <- 53 År 2024 uge 52 starter Mandag den 23 År 2025 uge 52 starter Mandag den 22
Nu mangler jeg bare en funktion som kan det samme som Format og DatePart (Den skal bare passe 100%)
hvis du har lavet verdens mest avanceret kalender så er det vel ikke noget problem for dig at lave en funktion som kan udtrække ugenummer fra en givet dato ;)
hoejrup > (Hvis den 27. december er en mandag, så er der en uge 53 i det pågældende år.)
Du må have en bug i dit program:
http://jeppesn.dk/uge.html hvis det ikke er skudår: Uge 53 indeholder altid datoen 3. januar året efter, men uge 53 eksisterer kun hvis 27. december var en søndag.
hvis det er skudår: Uge 53 indeholder altid datoen 2. januar året efter, men uge 53 eksisterer kun hvis 26. december var en lørdag eller en søndag.
sjn: nr 1 så snak respektfuldt til folk .. nr 2 så skulle det med angivelse af de flags der være rettet .. ellers er det måske på tide du opdaterer din VB engine ...
men ellers.. har du problemer med 1 dag ... så sig if weekday=vbmonday and weeknumber=53 then weeknumber=1 ... er det ik reelt kun den ene kombination der er fejlen (også ifølge deres eget site)
citat: "uge 53 eksisterer kun hvis 26. december var en lørdag eller en søndag. " (http://jeppesn.dk/uge.html) ... og det ser da ud til at passe ganske fint så
og "Uge 53 indeholder altid datoen 3. januar året efter, men uge 53 eksisterer kun hvis 27. december var en søndag. " ... ser da også ud til at passe (på ikke skud-år) (gør den ik?)
ja men kan vi så regne med det.. for så passer yahoo´s kalender ikke... og jeg kan ikke tro at yahoo har lavet så stor en fejl.. de holder jo styr på flere 1000 brgers kalender.. http://hjem.get2net.dk/sjh/eksperten/yahoo.jpg
og det loop viser ikke år 2000 med uge 53.. det siger at der først er uge 53 i år 2004...
sjh -> Jeg ved ikke hvilken standard Yahoo følger, men det er ikke dem der fastsætter standarden. Jeg tror britterne har deres egen standard for ugenumre, måske er det den de følger. Ellers skulle det ikke undre mig, hvis de følger en eller anden amerikansk standard.
år 2000 er et ikke skudår .. og der siger den .. "uge 53 eksisterer kun hvis 27. december var en søndag." ... så .. det må passe.. eftersom d. 27. dec 2000 er en onsdag..
.. .eller... skal lige tænke.. det er hver 4 år .. undtaget århundrede... dog alligevel år 1000 ... hey.. så var det skudår .. men så var reglen .. "uge 53 eksisterer kun hvis 26. december var en lørdag eller en søndag. " .. og det er en tirsdag... så ingen uge 53 der...
så uanset om det er skudår eller ikke skudår... så det regelsæt der er blevet fremsat siger at det ikke er... fejlen kunn evt tænkes at ligge som første uge af yahoo's kalender ... hva siger den om 1. måned i 2000 ?
hoejrup >> Du har lavet verdens mest avanceret kalender, og opfundet ordsproget at "sælge sand i sahara" for 5-6 år siden, selvom jeg første gang hørte det som barn. Jeg undrer mig. Tager du gas? Eller mener du det virkelig? http://www.eksperten.dk/spm/379338
sjh: ja.. se den er forkert.. uge 1 er IKKE den første uge der indeholder en torsdag... (den første uge er altid den første uge der indeholder 4 dage af det nye år..)
Undskyld at jeg bryder ind i jeres spændende diskution, men år 2000 VAR et skudår. Der er en undtagelse i 'århundredeskift's er ikke skudår'-reglen, og den er flg. hvis man kan dele årstallet med 400 er det et skudår. Der var meget software der skulle skrives om i Y2K pga. denne regel.
sur69: ja.. det har jeg os ændret... som du ser rettede jeg det kort bagefter ... (mit indlæg lige efter.... beklager meget de gener mine udtalelser har medført) :)
Private Sub Form_Load() Me.Caption = IsShotYear("1-1-1000") '=False End Sub
Public Function IsShotYear(ByVal varDato As Variant) As Boolean Dim intYear As Integer intYear = Year(CDate(varDato)) If intYear Mod 4 = 0 Then IsShotYear = True If intYear Mod 100 = 0 Then IsShotYear = False If intYear Mod 400 = 0 Then IsShotYear = True End Function
sur69: nej men nu skal noget jeg laver eller har lavet .. og sikkert heller ik det han laver her bruges i år 1000 .. og nok ej heller i år 4000 ... derfor kan jeg godt bruge mine tommelfinger regler her ... :)
Jeg har selv haft brug for at udregne hvilken uge det er, ud fra en bestemt dato, og til det formål er det med megen besvær lykkedes mig at lave en funktion i VBScript :)
Den har jeg modificeret en lille smule, således at den udskrev årene fra 2000 til 2030 med det tilhørende antal uger, og her er hvad jeg fik :)
Jeg er temmelig sikker på at dette er rigtigt, men kan naturligvis ikke være helt sikker. Jeg vil da gerne lægge scriptet herud, hvis det skulle være nødvendigt eller af interesse :)
Jeg har for øvrigt opdaget en spøjs ting, mens jeg prøvede at finde en mere manuel løsning på dette problem. Hvis vi befinder os i et skudår, så er ugedagen for nytårsaften den ugedag, der følger efter ugedagen for 1. januar. Så hvis f.eks. den 1. januar i et skudår er en onsdag, vil nytårsaften være en torsdag. Men hvis vi ikke befinder os i et skudår, så har begge dage den samme ugedag :)
In DK You MUST use the extra paramaters! 'Complies with DS/EN 28601. ' Monday is always the first day of the week (also if its in previos year). ' Week 1 is the first week of the year containing at least four days and will always contain the first Thirsday of the year.
The function Microsoft use as a solution works fine, and as you can see they STILL return 52 for both dates!
WeekNumber("2000-01-01") WeekNumber("2000-12-25")
Function WeekNumber(InDate As Date) As Integer Dim DayNo As Integer Dim StartDays As Integer Dim StopDays As Integer Dim StartDay As Integer Dim StopDay As Integer Dim VNumber As Integer Dim ThurFlag As Boolean
DayNo = Days(InDate) StartDay = Weekday(DateSerial(Year(InDate), 1, 1)) - 1 StopDay = Weekday(DateSerial(Year(InDate), 12, 31)) - 1 ' Number of days belonging to first calendar week StartDays = 7 - (StartDay - 1) ' Number of days belonging to last calendar week StopDays = 7 - (StopDay - 1) ' Test to see if the year will have 53 weeks or not If StartDay = 4 Or StopDay = 4 Then ThurFlag = True Else ThurFlag = False VNumber = (DayNo - StartDays - 4) / 7 ' If first week has 4 or more days, it will be calendar week 1 ' If first week has less than 4 days, it will belong to last year's ' last calendar week If StartDays >= 4 Then WeekNumber = Fix(VNumber) + 2 Else WeekNumber = Fix(VNumber) + 1 End If ' Handle years whose last days will belong to coming year's first ' calendar week If WeekNumber > 52 And ThurFlag = False Then WeekNumber = 1 ' Handle years whose first days will belong to the last year's ' last calendar week If WeekNumber = 0 Then WeekNumber = WeekNumber(DateSerial(Year(InDate) - 1, 12, 31)) End If End Function
Function Days(DayNo As Date) As Integer Days = DayNo - DateSerial(Year(DayNo), 1, 0) End Function
og begge disse funktioner returnerer det korrekte ISO-ugenummer
Function ugeNr1(dato As Date) As Integer '(VBA ?) ugeNr1 = CInt(Format(dato, "ww", vbMonday, vbFirstFourDays)) End Function
Function WeekNum(dtDate As Date) As Long Dim lRetVal As Long lRetVal = DateSerial(Year(dtDate + (8 - Weekday(dtDate)) Mod 7 - 3), 1, 1) WeekNum = ((dtDate - lRetVal - 3 + (Weekday(lRetVal) + 1) Mod 7)) \ 7 + 1 End Function
sjh, jamen, jeg har også altid været en fremmelig dreng *g*
Nå, men spøg til side...nu begynder det her sgu at irritere mig :/ Hvis man ikke kan regne med computeren, kan man vel regne med sig selv, så nu vil jeg prøve halvt manuelt at finde ud af det her :)
Men vi er vel allesammen enige om at hvis en uge har nogle dage splittet mellem december og januar, og de fleste dage ligger i december, så hører den dertil og er dermed uge 53. Men er de fleste dage i januar, hører den til januar og er dermed uge 1. Nogle, der er uenige? For ellers må det ligesom være basis for at finde ud af det rigtige :)
storbytossen: den uge der indeholder 1. torsdag i året .. det er uge 1 .. er sådan det er defineret...
men koden:
uge=DatePart("ww", dato, vbMonday, vbFirstFourDays) if weekday(dato)=2 and uge=53 and DatePart("ww", dato()+4, vbMonday, vbFirstFourDays)=1 then uge=1
det udregner det korrekte og retter den fejl som den indbyggede funktion har ... ifølge MS-egne info om det er fejlen udlukkende at en mandag viser forkert og resten af ugen ok´.. det er også det jeg har set i de loops jeg har lavet med den.
Det jeg så gør er at hvis nu det er mandag .. og den udregner torsdagen efter til at være uge 1 .. så er den mandag også uge 1 .. og så er den fejl rettet. det passer med alle standarder som er beskrevet her i den her tråd og det virker..
storbytossen: ja..så godt som .. men problemet går jo netop på at der er fejl i den indbyggede funktion til det... det er den min linie 2 retter op på ...
storbytossen> 'DS/EN 28601. ' Monday is always the first day of the week ' Week 1 is the first week of the year containing at least four days and will always contain the first Thirsday of the year.
If you take a look at this link there are a couple of functions to generate dates with the proble. You can use these to test your weeknum function to make sure its OK on other dates too.
sjh>Take a calendar (hard copy) for the year 2000 and LOOK! There is NOT a week 53! So yes yahoo do have an error! But then if Microsoft can then so can yahoo :o)
Okay...nu har jeg siddet og kigget på en hurtig opstilling af de sidste 30 års datoer, som jeg hurtigt lige lavede, og jeg har fundet ud af, at det loop, du lavede, sjh, 28/09-2003 00:11:34, faktisk passer ganske fremragende...jeg er nået frem til samme resultat mht antal uger :)
Nu skal jeg så bare finde ud af hvordan jeg så får min egen funktion tilpasset så den giver den rigtige uge...suk :(
En interresant kuriositet i dette spm. og for at gøre forvirringen total, er iøvrigt at søndag før i tiden blev regnet for den første dag i ugen i kristne kredse *S*
Fra http://www.logon.dk/lokalen_site/aviser/01/01/gis_kirke.html "Nu begynder vi en ny uge om mandagen, men for år tilbage var det, som det har været i hele vor kristne tid, at søndag var den første dag i ugen. Det var den, fordi Jesus stod op af graven på den første dag i ugen; dermed var en ny begyndelse gjort, og dermed var hver søndag en påmindelse om påskedag, hvor livet vandt, hvilket man fastholdt og fejrede i kirken."
og fra http://www.bibel-skolen.com/emner/Eu.htm "I Præste-foreningens blad, 20. maj. 1994. var der en artikel af sognepræst Jens Lyster, hvori der står: "Da vi den 1. januar 1973 uden forudgående debat udskiftede vores jødisk-kristne uge, der som bekendt begyndte om søndagen, med den strømliniede nummererede arbejdsuge, som erhvervslivet "tager hul på" om mandagen, forespurgte jeg i øst og vest om, hvordan sådan noget kunne ske uden modstand fra den folkekirke, der vel må have en arv at kendes ved. Da jeg endelig fandt nogen, der kunne give mig et svar, blev det oplyst, at sagen skam havde været til høring hos de danske biskopper, men at den nye ordning af ugen ikke havde givet anledning til indvendinger. Dette undrede mig! Kan man virkelig fra kirkens side og på folkets vegne uden videre opgive en tusindårig opfattelse af, at søndagen er den første dag i ugen?"
Fra http://www.bibel-skolen.com/leratst/dyrm-sp2.html "Modstanden mod denne ændring var MEGET BEGRÆNSET, fordi næsten ingen var klar over den virkelige årsag til at kalenderen skulle ændres. Den virkelige årsag til denne ændring, er at det var det første skridt væk fra den hviledag som Herren har givet, lørdagen den syvende dag i ugen, <1 Mos 2,2-3 2 Mos 20,8-11> til søndagen den første dag i ugen, som nu blev den syvende. At det så medfører at Jesus opstod en mandag morgen i stedet for søndag morgen, <Matt 28,1 Mark 16,2> er blot en af de ting, som man i vide kredse foretrak at overse."
ok.. uge numre er noget skidt.. Amerikanerne har deres metode Englænderne har deres men vi har ISO 8601, som siger at : Hvis det ikke er skudår og d. 27 dec falder på en søndag eller hvis det er skudår og d. 26 falder på en Lørdag eller en Søndag .....Så har vi en uge 53 (http://jeppesn.dk/uge.html)...hvordan Checker man så det...???
vi har nu 1 mia gange igennem den her tråd givet opskriften på hvordan man udregner ugenummeret... og gennemgået og tjekket at de metoder rent faktisk fungerer.... så er den her tråd ik ved at være færdig og lukket ?
....Man tager en SQL-server, holder sig fra vb-datofunktioner, og så fra et forholdsvis simpelt loop tælle op fra jannuar d. 1 som netop faldt på Mandag uge 1. Regner man så, skal vi sige, 10000 år frem skal 17,75% ( jfr: http://jeppesn.dk/uge.html ) af årene have 53 uger. Herefter kan man med simpelt SQL få alle de oplysninger man behøver
spuncut: udover at der er kommet det som giver det rigtige resultat og at det er gennemdiskuteret/testet ... så er der vel ikke.. men er det ikke også nok ?
couldnt see that because of all the comments :o) Strange though, I havent received a mail saying it was, when did this happen?
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.