5 строк кода

Как писать комерческие приложения на MS Access

Как из номера квартала получить дату или период для поиска

Комментариев нет

calendar

Недавно на моем любимом форуме проскакивал одноименный ответ. Сперва я сам как-то задумался, а как же. Но как оказалось задача «По номерам недель получить временной промежуток для фильтра по датам» оказалось проще простого. Для этого я воспользовался любимым методом «Разделяй и властвуй».

И так, задача разбилась на три части:
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 рассылку или добавить в ЖЖ друзья.

Written by Сергей Скоков

Март 25th, 2010 at 3:23 пп

Posted in решения

Leave a Reply