ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 17.01.2002

Diese Seite wurde zuletzt aktualisiert am 17.01.2002
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Kalenderwochen im Jahr

Zurück...


Anzeige

(-hg) mailto:hg_kwsinyear@aboutvb.de

Wie viele Wochen hat ein Jahr? Rein rechnerisch ist das natürlich ganz einfach zu ermitteln - ein Jahr mit 365 Tagen hat 52,1428571... Wochen, ein Schaltjahr hat 52,2857142... Wochen. Interessanter ist jedoch die Antwort auf die Frage nach der Anzahl der Kalenderwochen, die sich aus der üblichen Nummerierung der Wochen eines Jahres ergibt. Und diese Zahl wechselt zwischen 52 und 53, je nach dem, auf welchen Wochentag der 1. Januar oder der 31. Dezember eines gegebenen Jahres fallen - zumindest gilt dies für Deutschland und die meisten Ländern Europas. Die Regel lautet nach ISO 8601, dass die erste Kalenderwoche diejenige ist, die mindestens 4 Tage des neuen Jahres enthält - der 1. Januar muss also auf einen Montag, Dienstag, Mittwoch oder Donnerstag fallen.

Bevor Sie jetzt jedoch anfangen, mit den Tagen um eine Jahreswende herum zu rechnen, können Sie die Funktion DatePart verwenden, die zu einem gegebenen Datum bei Angabe von "ww" als Intervall die korrekte Kalenderwoche zurückgibt. Lediglich den 31. Dezember eines gegebenen Jahres zu verwenden, würde jedoch nicht funktionieren, da die letzten Tage eines Jahres ja schon zur ersten Kalenderwoche des Folgejahres gehören können. Sie müssen also gegebenenfalls noch so lange rückwärts im Jahr zu gehen, bis sich eine Wochenzahl größer als 1 ergibt.

Doch auch dieses Verfahren hat noch eine Tücke. Ein Bug in der DatePart-Funktion (die Format-Funktion ist übrigens auch betroffen) lässt diese die Wochenzahl 53 für den 29.12. ausgeben, wenn dieser auf einen Montag fällt - eigentlich müsste es die 1. Kalenderwoche des Folgejahres sein.

Die folgende Funktion WeeksOfYear berücksichtigt diesen Bug und ermittelt die Anzahl der Kalenderwochen eines Jahres entweder zu einem optional zu übergebenden Datum oder einer Jahreszahl. Dazu können Sie die Festlegung des ersten Wochentages als auch der ersten Kalenderwoche als optionale Parameter übergeben - voreingestellt sind die Systemeinstellungen.

Public Function WeeksInYear(Optional ByVal TestDate As Variant, _
 Optional ByVal TestYear As Variant, _
 Optional ByVal FirstDayOfWeek As VbDayOfWeek _
  = vbUseSystemDayOfWeek, _
 Optional ByVal FirstWeekOfYear As VbFirstWeekOfYear _
  = vbUseSystem) As Integer

  Dim nYear As Integer
  Dim nDate As Date
  Dim nWeek As Integer
  Dim nWeekday As Integer
  
  If IsMissing(TestDate) Then
    If IsMissing(TestYear) Then
      'Error
    Else
      nYear = TestYear
    End If
  Else
    nYear = Year(TestDate)
  End If
  nDate = DateSerial(nYear, 12, 31)
  Do
    nWeek = DatePart("ww", nDate, FirstDayOfWeek, FirstWeekOfYear)
    Select Case nWeek
      Case 1
        nDate = nDate - 1
      Case 53
        If DatePart("ww", nDate + 7, _
         FirstDayOfWeek, FirstWeekOfYear) = 2 Then
          WeeksInYear = 52
        Else
          WeeksInYear = 53
        End If
        Exit Function
      Case 52
        WeeksInYear = 52
        Exit Function
    End Select
  Loop
End Function

Modul modWeeksInYear (modWeeksInYear.bas - ca. 1,3 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer