[ASP] Weeknummer --> Datum niet altijd goed

Pagina: 1
Acties:

  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 04-09 12:53
Ik geef aan een stukje code een jaar en een weeknummer mee en onderstaande script maakt van die twee gegevens een pull-down menu met de beschikbare datums van maandag tot zondag van de gekozen jaar en weeknummer.

Ik gebruik onderstaande script:
code:
1
2
3
4
5
6
7
8
9
10
11
If Datum = "" Then
    DatumPullDown = DatumPullDown & "<option value="""">Kies datum</option>"
    If Week <> "" Then
    x = 1
    BeginDatumWeek = (DateAdd("ww", (Week-1), "1-1-" & Jaar) - 2)
        Do While x < 8
            DatumPullDown = DatumPullDown & "<option value=""" & DateAdd("d", x, BeginDatumWeek) & """>" & FormatDateTime(DateAdd("d", x, BeginDatumWeek), 0) & "</option>"
            x = x + 1
        Loop
    End If
End If

Als ik nu bijvoorbeeld jaar 2002 en week 23 kiest dan krijg ik netjes een pull-down van ma 3-6-2002 tot zo 9-6-2002.

Maar als ik nu bijvoorbeeld jaar 2000 en week 23 kiest dan krijg ik niet 5-6-2000 tot 11-6-2000 maar dan krijg ik 2-6-2000 tot 8-6-2000.

Hoe kan ik dit probleem oplossen :?

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


Verwijderd

Je telt een aantal weken op bij 1 januari en trekt daar twee (dagen??) van af. Dat is natuurlijk maar in één op de zeven jaar toevallig een zondag...

(als ik het zo snel goed heb gelezen in ieder geval)

  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 04-09 12:53
Op maandag 03 juni 2002 11:38 schreef JeroenDega het volgende:
Je telt een aantal weken op bij 1 januari en trekt daar twee (dagen??) van af. Dat is natuurlijk maar in één op de zeven jaar toevallig een zondag...

(als ik het zo snel goed heb gelezen in ieder geval)
Daar heb je gelijk in, nu dus maar ff wat anders verzinnen!

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 04-09 12:53
Hoe krijg ik de datum van de eerste maandag van de eerste week van een jaar. Deze kan ik dan gebruiken voor bovenstaande script!

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • Glabbeek
  • Registratie: Februari 2001
  • Laatst online: 04-09 14:30

Glabbeek

Dat dus.

Het is wel een heel andere taal, namelijk Lotus Notes @Functions, maar in de volgende code bepaal ik de maandag van week 1 van het huidige jaar:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UseDate := @Date(@Year(@Now) ; 1 ; 1);

_Jan1st := @Date(@Year(@Adjust(UseDate; 0; 0; 
          @Select(@Weekday(UseDate); - 3; + 3; + 2; + 1; 0; - 1; - 2); 0; 0; 0)); 1; 1);
_Monday := @Adjust(_Jan1st; 0; 0; 
          @Select(@Weekday(_Jan1st); 1; 0; - 1; - 2; - 3; 3; 2); 0; 0; 0);
Weeknum := @Integer(((UseDate - _Monday) / 86400 + 7) / 7);

DayAdjust := @If(Weeknum > 1 ; 7 ; 0);
DateInWeekOne := @Adjust(UseDate ; 0 ; 0 ; DayAdjust ; 0 ; 0 ; 0);

WeekDayDayInWeekOne := @Weekday(DateInWeekOne);
DayAdjustWeekOne := (-1 * WeekDayDayInWeekOne) + 2;
BaseMondayWeekOne := @Adjust(DateInWeekOne ; 0 ; 0 ; DayAdjustWeekOne ; 0 ; 0 ; 0);

BaseMondayWeekOne

Misschien heb je na wat verbouwen er iets aan, het spreekt voor zich denk ik

[edit - whoops. Layoutverkrachting. Sorry]

En zo is het maar net.


  • Glabbeek
  • Registratie: Februari 2001
  • Laatst online: 04-09 14:30

Glabbeek

Dat dus.

Ow ja, om bovenstaande post wat helderder te maken even een uitleg over @Adjust:
Adjusts the specified time­date value by the number of years, months, days, hours, minutes, and/or seconds you specify. The amount of adjustment may be positive or negative.

Syntax

@Adjust( dateToAdjust ; years ; months ; days ; hours ; minutes ; seconds ; [ DST] )
en @Select
Returns the value that appears in the number position. If the number is greater than the number of values, @Select returns the last value in the list. If the value in the number position is a list, returns the entire list contained within the value.

Syntax

@Select( number ; values )

En zo is het maar net.


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 04-09 12:53
Op maandag 03 juni 2002 12:59 schreef Glabbeek het volgende:
Ow ja, om bovenstaande post wat helderder te maken even een uitleg over @Adjust:
[..]

en @Select
[..]
Ik zal eens kijken of ik de code om kan zetten naar visual basic, maar je code ziet er wel logish uit, maar ik geloof wel dat ik niet precies de zelfde methode kan gebruiken!

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 20:07

HenkS

Da_king alias HenkS

zou zeggen... zoek op internet.. echt genoeg te vinden hoor... want jouw oplossing is niet echt je-van-het

  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 04-09 12:53
Ik heb het opgelost met onderstaand code, misschien een beetje raar, maar het werkt als een trein!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
If Datum = "" Then
    Dim Dag(7)
    Dag(1) = " ma"
    Dag(2) = " di"
    Dag(3) = " wo"
    Dag(4) = " do"
    Dag(5) = " vr"
    Dag(6) = " za"
    Dag(7) = " zo"
    
    
    DagVan1Jan = Weekday("1-1-" & Jaar)
    SomTotMaandag = 2 - DagVan1Jan
    DatumMaandag = DateAdd("d", SomTotMaandag, "1-1-" & Jaar)
    WeeknummerVanMaandag = DatePart("ww", DatumMaandag, 2, 2)
    If WeeknummerVanMaandag = 52 OR WeeknummerVanMaandag = 53 Then
        Response.Write "Test"
        EersteMaandag = DateAdd("d", 7, DatumMaandag)
    Else
        EersteMaandag = DatumMaandag
    End If

    
    
    DatumPullDown = DatumPullDown & "<option value="""">Kies datum</option>"
    If Week <> "" Then
    x = 1
    BeginDatumWeek = (DateAdd("ww", (Week-1), EersteMaandag) - 1)
        Do While x < 8
            DatumPullDown = DatumPullDown & "<option value=""" & DateAdd("d", x, BeginDatumWeek) & """>" & FormatDateTime(DateAdd("d", x, BeginDatumWeek), 0) & " " & Dag(x) & "</option>"
            x = x + 1
        Loop
    End If
End If

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
code:
1
2
3
4
5
6
7
8
Dim datum, dag
datum = CDate( "01/01/2002" )
dag = WeekDay( datum )
While Not dag = 1
  datum = DateAdd( "d", -1, datum )
  dag = WeekDay( datum )
Wend
datum = DateAdd( "d", 1, datum )

Hij kijkt nu wanneer de zondag is in de week van 1-1-02 en doet daar dan 1 dag bij -> maandag.
Als je zoekt naar maandag kan t zijn dat wanneer 1-1 op een zondag valt je een hele week terugzoekt naar de maandag er voor terwijl dat dan de laatste week is van het jaar ervoor.

Alles ondervoorbehoud natuurlijk. :o
Pagina: 1