[AccessD] Figuring the date...opposite request

Mark A Matte markamatte at hotmail.com
Sat Mar 7 13:18:30 CST 2009


Thanks Gustav,

 

I hate to make assumptions...but "DatePart("yyyy",[date],1,3)" just doesn't work/ignores the arguments?

 

Thanks,

 

Mark

 


 
> Date: Sat, 7 Mar 2009 20:04:07 +0100
> From: Gustav at cactus.dk
> To: accessd at databaseadvisors.com
> Subject: Re: [AccessD] Figuring the date...opposite request
> 
> Hi Mark
> 
> That depends, but here is a method for the ISO weeknumber standard:
> 
> <code>
> Public Function ISO_WeekYearNumber( _
> ByVal datDate As Date, _
> Optional ByRef intYear As Integer, _
> Optional ByRef bytWeek As Byte) _
> As String
> 
> ' Calculates and returns year and week number for date datDate according to the ISO 8601:1988 standard.
> ' Optionally returns numeric year and week.
> ' 1998-2007, Gustav Brock, Cactus Data ApS, CPH.
> ' May be freely used and distributed.
> 
> Const cbytFirstWeekOfAnyYear As Byte = 1
> Const cbytLastWeekOfLeapYear As Byte = 53
> Const cbytMonthJanuary As Byte = 1
> Const cbytMonthDecember As Byte = 12
> Const cstrSeparatorYearWeek As String = "W"
> 
> Dim bytMonth As Byte
> Dim bytISOThursday As Byte
> Dim datLastDayOfYear As Date
> 
> intYear = Year(datDate)
> bytMonth = Month(datDate)
> bytWeek = DatePart("ww", datDate, vbMonday, vbFirstFourDays)
> 
> If bytWeek = cbytLastWeekOfLeapYear Then
> bytISOThursday = WeekDay(vbThursday, vbMonday)
> datLastDayOfYear = DateSerial(intYear, cbytMonthDecember, 31)
> If WeekDay(datLastDayOfYear, vbMonday) >= bytISOThursday Then
> ' OK, week count of 53 is caused by leap year.
> Else
> ' Correct for Access97/2000+ bug.
> bytWeek = cbytFirstWeekOfAnyYear
> End If
> End If
> 
> ' Adjust year where week number belongs to next or previous year.
> If bytMonth = cbytMonthJanuary Then
> If bytWeek >= cbytLastWeekOfLeapYear - 1 Then
> ' This is an early date of January belonging to the last week of the previous year.
> intYear = intYear - 1
> End If
> ElseIf bytMonth = cbytMonthDecember Then
> If bytWeek = cbytFirstWeekOfAnyYear Then
> ' This is a late date of December belonging to the first week of the next year.
> intYear = intYear + 1
> End If
> End If
> 
> ISO_WeekYearNumber = CStr(intYear) & cstrSeparatorYearWeek & Format(bytWeek, "00")
> 
> End Function
> </code>
> 
> /gustav
> 
> 
> >>> markamatte at hotmail.com 07-03-2009 19:49 >>>
> 
> Someone has asked me to do the opposite of what Jennifer is doing. I know I can create a date table...but other than that...
> 
> They need to report weekly numbers...and one data point can change periodically...and is not stored historically. I was asked to store this value based on Year and Week. I cannot get the last/first week of 08/09 to work.
> 
> I'm using Year: DatePart("yyyy",[date],1,3) and Week: DatePart("ww",[date],1,3) to get the values.
> 
> The results below are confusing...how do I get all of the dates to show the same week/year for the last /first week. They don't even care which way it goes...just so they can keep the weeks together.
> 
> date year week
> 12/31/08 2008 52
> 1/2/09 2009 52
> 
> Thanks,
> 
> Mark A. Matte
> 
> 
> 
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com

_________________________________________________________________
Windows Live™ Groups: Create an online spot for your favorite groups to meet.
http://windowslive.com/online/groups?ocid=TXT_TAGLM_WL_groups_032009


More information about the AccessD mailing list