Mwp.Reid at Queens-Belfast.AC.UK
Mwp.Reid at Queens-Belfast.AC.UK
Thu Jan 30 12:49:00 CST 2003
Heres one Monday No one will get up out of bed for school Friday House is total happiness - no more homeworks to help with Martin (<: Quoting John Skolits <JSkolits at CorporateDataDesign.com>: > Here is some real old stuff that I got from somewhere. I'm sure someone > will > find a flaw in it someplace. > > > Function StartOfWeek(ByVal D As Date) As Date > StartOfWeek = D - WeekDay(D) + 1 > End Function > > Function EndOfWeek(ByVal D As Date) As Date > EndOfWeek = D - WeekDay(D) + 7 > End Function > > Function EndOfMonth(ByVal D As Date) As Date > EndOfMonth = DateSerial(Year(D), Month(D) + 1, 0) > End Function > > Function StartOfMonth(ByVal D As Date) As Date > StartOfMonth = DateSerial(Year(D), Month(D), 1) > End Function > > > There ya' go. Hope they work. > > John Skolits > > -----Original Message----- > From: accessd-admin at databaseadvisors.com > [mailto:accessd-admin at databaseadvisors.com]On Behalf Of Gustav Brock > Sent: Thursday, January 30, 2003 1:14 PM > To: Seth Galitzer > Subject: Re: [AccessD] HOW TO: Determine start and end of week given a > specific date > > > Hi Seth > > That looks nice, Seth, but as you know it isn't of much value on this > side of the ocean where the first day of the week is Monday according > to the ISO standard. > > I have two generic functions for this purpose which tries to follow > the Access conventions for dealing with dates and day values and using > the built in constants where possible. They should fit for any > environment (I won't use that in..-word to spare JC who is busy for > moment). > > The default value for the weekstart is set to Monday for various > reasons but could easily be changed to vbUseSystemDayOfWeek. > > It doesn't turn out as simple as yours (and Charlotte's) but, anyway, > here goes: > > <code> > > Function DateWeekFirst( _ > ByVal datDate As Date, _ > Optional ByVal lngFirstDayOfWeek As Long = vbMonday) _ > As Date > > ' Returns the first date of the week of datDate. > ' lngFirstDayOfWeek defines the first weekday of the week. > ' 2000-09-07. Cactus Data ApS. > > ' No special error handling. > On Error Resume Next > > ' Validate lngFirstDayOfWeek. > Select Case lngFirstDayOfWeek > Case _ > vbMonday, _ > vbTuesday, _ > vbWednesday, _ > vbThursday, _ > vbFriday, _ > vbSaturday, _ > vbSunday, _ > vbUseSystemDayOfWeek > Case Else > lngFirstDayOfWeek = vbMonday > End Select > > DateWeekFirst = DateAdd("d", vbSunday - _ > WeekDay(datDate, lngFirstDayOfWeek), datDate) > > End Function > > Function DateWeekLast( _ > ByVal datDate As Date, _ > Optional ByVal lngFirstDayOfWeek As Long = vbMonday) _ > As Date > > ' Returns the last date of the week of datDate. > ' lngFirstDayOfWeek defines the first weekday of the week. > ' 2000-09-07. Cactus Data ApS. > > ' No special error handling. > On Error Resume Next > > ' Validate lngFirstDayOfWeek. > Select Case lngFirstDayOfWeek > Case _ > vbMonday, _ > vbTuesday, _ > vbWednesday, _ > vbThursday, _ > vbFriday, _ > vbSaturday, _ > vbSunday, _ > vbUseSystemDayOfWeek > Case Else > lngFirstDayOfWeek = vbMonday > End Select > > DateWeekLast = DateAdd("d", vbSaturday - _ > WeekDay(datDate, lngFirstDayOfWeek), datDate) > > End Function > > </code> > > /gustav > > > > Just thought I'd share something I worked out just now, only 'cause > I > > thought it was spiffy and was sure newbies and oldies might find a > use > > for it. > > > So a user comes up to me and asks me to make a report that they > would > > need to generate from time to time which would contain a week's-worth > of > > data. However, they might not always generate it on time and so > would > > need to be able to get data from any given week. "No problem!" I > told > > them. And it turns out I was right. > > > I'll leave the interface up to you, because the spiffy part is > getting > > the first and last day of the week. We always wanted to get data from > a > > given week, starting with Sunday and ending with Saturday (standard > > Western week period). The solution lies in a little built-in > function > > called Weekday(). This function returns the ordinal value of the day > of > > the week given that day as a Date value. So Weekday(#1/29/2003#) > would > > return 4. With a bit of simple math and the use of the DateAdd() > > function, we can get either the start date or end date of a week > given > > any date with one line of code each. > > > Here are the two functions I wrote (error-hendler left out): > > > Public Function basGetWeekStart(dte As Date) As Date > > 'Subtract the ordinal value of dte and add 1 to get the Sunday > > ' before dte > > basGetWeekStart = DateAdd("d", -(Weekday(dte)) + 1, dte) > > End Function > > > Public Function basGetWeekEnd(dte As Date) As Date > > 'Subtract the ordinal value of dte from 7 (vbSaturday = 7) > > ' and add that many days to dte to get the Saturday after dte > > basGetWeekEnd = DateAdd("d", vbSaturday - (Weekday(dte)), dte) > > End Function > > > Note that by default, Weekday() uses Sunday as the start of the > week, > > but that can be overriden to suit your needs by adding one more > > parameter value to the function call. See Help on the function for > > constant values to use. > > > This is the kind of code I like: simple, elegant, and relatively > > self-explanitory. > > > Enjoy! > > > Seth > > _______________________________________________ > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > > _______________________________________________ > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com >