Время входа пользователя в систему - PullRequest
0 голосов
/ 01 января 2012

У меня есть изменения в моей заявке.Я хочу ограничить время, в течение которого пользователь может войти в определенный промежуток времени.

Сдвиг 1 от AM до PM работает нормально, но проверка PM до AM создает проблемы.Это связано с тем, что вторая смена начинается в 17:00 и заканчивается на следующий день в 10:00.

Структура пользовательской таблицы:

shiftid,  starttime,  endtime
1,        6:00:00 AM, 11:30:00 PM
2,        5:00:00 PM, 10:00:00 AM

Ответы [ 2 ]

1 голос
/ 01 января 2012

Предполагая, что время начала и время окончания являются значениями времени в вашей таблице, вы можете использовать следующее:

DECLARE
  @timenow TIME

-- Get the current time  
SELECT @timenow = CONVERT(TIME, GETDATE())

SELECT * 
  FROM temp
         -- This clause handles the case where the shifts don't go past midnight
 WHERE ((endtime > starttime) AND (@timenow BETWEEN starttime AND endtime))

         -- This clause handles the case where the shifts do go past midnight
    OR ((endtime < starttime) AND (@timenow >= starttime OR @timenow <= endtime))

Если ваши значения не хранятся с типом данных Time, вы можете преобразовать их следующим образом:

CONVERT(TIME, starttime)

Обновление

Чтобы сделать это в своем коде, вам нужно изменить следующую строку:

If tNow > stTime And tNow < edTime Then 

для соответствия логике в sql:

If tNow >= stTime OrElse tNow <= edTime Then

Это делает код:

    Dim tNow As String
    Dim stTime As String
    Dim edTime As String

    tNow = Format(Date.Now, "hh:mm tt")

    stTime = Format(ds.Tables("shiftdetails").Rows(0).Item("starttime"), "hh:mm tt")
    edTime = Format(ds.Tables("shiftdetails").Rows(0).Item("endtime"), "hh:mm tt")
    If stTime < edTime Then
        If tNow >= stTime OrElse tNow <= edTime Then
            bShift = True
        End If
    Else
        If tNow >= stTime And tNow <= edTime Then
            bShift = True
        End If
    End If
0 голосов
/ 01 января 2012
select .... where timeWork >= TimeStart and timeWork < TimeEnd  
               and timeStart < timeEnd 
            or    timeWork <= TimeStart and timeWork > TimeEnd 
               and timeStart < timeEnd
...