webForumDet fria alternativet

Arbetstid kvar till helg?

ASP

6 svar · 334 visningar · startad av Quid

Medlem sedan juni 20006 022 inlägg
Frågan#1

Jag är ute efter en funktion som räknar ner arbetstid till nästa helg.

Jag jobbar 8-17, lunch mellan 12 och 13.
Jag vill ha det i formatet: Det är X timmar, x minuter och x sekunder kvar till helg.

Någon som orkar knåpa ihop en sån funktion? :)
(ps. jag gör det iaf inte)

Medlem sedan jan. 20032 285 inlägg
#2

Är till 99% säker på att den stämmer. ;)

<%
Function WorkTime(dtmDate)
  intTime = CDate(Hour(dtmDate) & ":" & Minute(dtmDate) & ":" & Second(dtmDate))
  intWeekday = Weekday(dtmDate, vbMonday)

  If intWeekday = 7 Then intWeekday = 6

  intDays = 6 - intWeekday
  intSeconds = intDays * 8 * 3600

  If intTime => CDate("8:00:00") AND intTime =< CDate("12:00:00") Then
    intSeconds = intSeconds - (((Hour(intTime) - 8) * 3600 + (Minute(intTime) * 60) + Second(intTime)))
  ElseIf intTime => CDate("13:00:00") AND intTime =< CDate("17:00:00") Then
    intSeconds = intSeconds - (((Hour(intTime) - 9) * 3600 + (Minute(intTime) * 60) + Second(intTime)))
  End If

  intHours = Int(intSeconds / 3600)
  intMinutes = Int((intSeconds - intHours * 3600) / 60)
  intSeconds = intSeconds - ((intHours * 60 + intMinutes) * 60)

  WorkTime = intHours & " timmar, " & intMinutes & " minuter och " & intSeconds & " sekunder kvar till helgen."
End Function

Response.Write(WorkTime(Now()))
%>

/red En liten ändring bara.

Medlem sedan juni 20006 022 inlägg
#3

Verkar funka kanon, tack som fan.

En liten sak bara, varje gång klockan är efter 17:00 så visar den 40 timmar.

Medlem sedan jan. 20032 285 inlägg
#4

Skriv om If-satsen till det här så ska det nog funka. :)

If intTime => CDate("8:00:00") AND intTime =< CDate("12:00:00") Then
  intSeconds = intSeconds - (((Hour(intTime) - 8) * 3600 + (Minute(intTime) * 60) + Second(intTime)))
ElseIf intTime => CDate("13:00:00") AND intTime =< CDate("17:00:00") Then
  intSeconds = intSeconds - (((Hour(intTime) - 9) * 3600 + (Minute(intTime) * 60) + Second(intTime)))
ElseIf intTime > CDate("17:00:00") AND intWeekday < 6 Then
  intSeconds = intSeconds - 8 * 3600
End If

/red Klantade till det lite grann, men nu är det nog rätt. :)
/red2 Eller inte... Nu så ska det funka! ;)

Medlem sedan juni 20006 022 inlägg
#5

Funkar kanon, tack som fan!

Medlem sedan jan. 20032 285 inlägg
#6

Tyvärr inte riktigt perfekt.
Har ändrat lite i funktionen nu, så jag skriver hela den "nya" funktionen den här gången.

Function WorkTime(dtmDate)
  intTime = CDate(Hour(dtmDate) & ":" & Minute(dtmDate) & ":" & Second(dtmDate))
  intWeekday = Weekday(dtmDate, vbMonday)

  If intWeekday => 6 Then
    WorkTime = "Det är ju helg nu!"
    Exit Function
  End If

  intDays = 6 - intWeekday
  intSeconds = intDays * 8 * 3600

  If intTime => CDate("8:00:00") AND intTime =< CDate("12:00:00") Then
    intSeconds = intSeconds - (((Hour(intTime) - 8) * 3600 + (Minute(intTime) * 60) + Second(intTime)))
  ElseIf intTime => CDate("13:00:00") AND intTime =< CDate("17:00:00") Then
    intSeconds = intSeconds - (((Hour(intTime) - 9) * 3600 + (Minute(intTime) * 60) + Second(intTime)))
  ElseIf intTime > CDate("17:00:00") Then
    intSeconds = intSeconds - 8 * 3600
  End If

  intHours = Int(intSeconds / 3600)
  intMinutes = Int((intSeconds - intHours * 3600) / 60)
  intSeconds = intSeconds - ((intHours * 60 + intMinutes) * 60)

  WorkTime = intHours & " timmar, " & intMinutes & " minuter och " & intSeconds & " sekunder kvar till helgen."
End Function
Medlem sedan feb. 200112 078 inlägg
#7

Markera gärna det svar som bidrog till lösningen som slutgiltigt.

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)