ASP - минута в часы - PullRequest
       11

ASP - минута в часы

1 голос
/ 05 ноября 2011

Я исчисляю часы из минут.

 <% hrs =(DateDiff("N", cdate(m1), CDate(m2)  ))/60 %> .

это не дает ожидаемого результата.

Мне нужны эти часы, чтобы генерировать зарплату, поэтому время должно быть равно 7,25, 7,50, 7,75 ина ... не 7,23 или 7,28, 7,30 иногда дает 7,833333333333

Пожалуйста, помогите

Ответы [ 3 ]

2 голосов
/ 05 ноября 2011

Я думаю, что вы действительно хотите это: -

 Dim hrs
 hrs = Int(DateDiff("N", CDate(m1), CDate(m2)) / 15) / 4

Это на основании того, что вы платите только зарплату за отработанное время, измеренное с шагом в четверть часа.

1 голос
/ 06 ноября 2011

Решение Энтони потрясающее, но оно округляется.Если вы хотите округлить больше чем 7 минут до ближайших 15 минут, используйте следующее:

Const csRoundUp = 7
Dim Minutes
Dim hrs

Minutes = Int(DateDiff("N", CDate(Date1), CDate(Date2)) Mod 60)
if Minutes > csRoundUp  then
  hrs = (Int(DateDiff("N", CDate(Date1), CDate(Date2)) / 15)+1) / 4
else
  hrs = Int(DateDiff("N", CDate(Date1), CDate(Date2)) / 15) / 4
end if

Конечно, вы можете изменить значение csRoundUp на любое значение, которое вы считаете подходящим.

0 голосов
/ 05 ноября 2011

Используйте

100Minutes = 100 * 60Minutes \ 60

для расчета санти минут от «нормальных» минут. Демонстрация:

  Dim dtStart : dtStart = #11/5/2011 08:00:00#
  Dim aTests  : aTests  = Array( _
        0, 1, 6, 15, 30, 45, 59, 60, 90 _
  )
  Dim nAddMins
  For Each nAddMins In aTests
      Dim dtStop : dtStop = DateAdd( "n", 7 * 60 + nAddMins, dtStart )
      Dim dtDiff : dtDiff = CDate( dtStop - dtStart )
      Dim nHours : nHours = Hour(   dtDiff )
      Dim nMins  : nMins  = Minute( dtDiff )
      If nAddMins Mod 60 <> nMins Then
         Err.Raise vbObjectError + 4711, "CentiMinute", nAddMins & " <> " & nMins
      End If
      Dim nCMins : nCMins = 100 * nMins \ 60
      WScript.Echo dtStart, dtStop _
        , Right( 1000 + nAddMins, 3 ) _
        , Right(  100 + nHours  , 2 ) & ":" & Right(  100 + nMins   , 2 ) _
        , Right(  100 + nHours  , 2 ) & "." & Right(  100 + nCMins  , 2 )
  Next

Вывод (немецкий язык):

=========================================================
05.11.2011 08:00:00 05.11.2011 15:00:00 000 07:00 07.00
05.11.2011 08:00:00 05.11.2011 15:01:00 001 07:01 07.01
05.11.2011 08:00:00 05.11.2011 15:06:00 006 07:06 07.10
05.11.2011 08:00:00 05.11.2011 15:15:00 015 07:15 07.25
05.11.2011 08:00:00 05.11.2011 15:30:00 030 07:30 07.50
05.11.2011 08:00:00 05.11.2011 15:45:00 045 07:45 07.75
05.11.2011 08:00:00 05.11.2011 15:59:00 059 07:59 07.98
05.11.2011 08:00:00 05.11.2011 16:00:00 060 08:00 08.00
05.11.2011 08:00:00 05.11.2011 16:30:00 090 08:30 08.50
=========================================================
...