Как из номера квартала получить дату или период для поиска
Недавно на моем любимом форуме проскакивал одноименный ответ. Сперва я сам как-то задумался, а как же. Но как оказалось задача «По номерам недель получить временной промежуток для фильтра по датам» оказалось проще простого. Для этого я воспользовался любимым методом «Разделяй и властвуй».
И так, задача разбилась на три части:
1. Функция, которая вернет дату начала недели по номеру недели и году.
Public Function GetDateOfStartWeek(ByVal nWeek As Byte, ByVal nYear As Integer) As Date
Dim dt1Jan As Date
Dim dayFirstWeek As Integer
Dim dtResult As Date
dt1Jan = DateSerial(nYear, 1, 1)
dayFirstWeek = Weekday(dt1Jan, vbMonday)
dtResult = DateAdd("ww", nWeek - 1, dt1Jan)
If dayFirstWeek > 1 And nWeek > 1 Then
dtResult = DateAdd("d", -1 * (7 - Weekday(dt1Jan, vbMonday) + 2), dtResult)
End If
GetDateOfStartWeek = dtResult
End Function
2. Функция, которая вернет дату окончания недели по номеру недели и году.
Public Function GetDateOfEndWeek(ByVal nWeek As Byte, ByVal nYear As Integer) As Date
GetDateOfEndWeek = DateAdd("d", 7 - 1, GetDateOfStartWeek(nWeek, nYear))
End Function
3. Фнункция, которая вернет условие за период по датам:
public frunction GetWherePeriod(ByVal imFld as string, ByVal dtFrom as Date, ByVal dtTo as Date) as String GetWherePeriod = BuildCriteria(imFld, dbDate, "Between " & dtFrom & " And " & dtTo & "") End Public '-- Проверка Debug.Print GetWherePeriod(GetDateOfStartWeek(1, 2010), GetDateOfEndWeek(1, 2010))
Как-то уж очень просто получилось… Функцию GetDateOfStartWeek() я активно не тестировал, проверял только для января за 2010 и 2007 года. Если будут ошибки, пишите.
До встречи!
(с) Скоков Сергей
Подписаться на: RSS или e-mail рассылку или добавить в ЖЖ друзья.