Hej på er. Exakt det problemmet löste Vi för ett halvår sedan här. Hehehe, nej det var det inte, jag har inte för vana att börja om från början efter 6 månader med ett problem som redan är löst. Men det vore väldigt intressant att se hur det löstes! Jag har försökt att söka fram något liknande här bland alla forum men har inte hittat något. Jag också, kommer så väl ihåg hur vi satt och löste exakt detta. så här löste jag det, tror det ska fungera Tack för hjälpen! Det verkar en aning ineffektivt med en loop... här kommer VB-koden för Per's lösning.. Bra att du tog dig tid! det har du fullständigt rätt i! det missade jag.. Jag är imponerad. Tack tack, det är ju naturligtvis mycket effektivare än en loop! Och det fungerar såvitt jag kan se alldeles utmärkt! <b>Exakt det problemmet löste Vi för ett halvår sedan här.</b> Funkar verkligen det där? Men för helvete... Du har rätt. Jag har glömt att begränsa arbetstiden nedåt. Räknar den 00 - 18 i stället för 06 - 18.Beräkna tidsdifferens, med hänsyn till helgdagar och "nätter
Nu har jag ett klurigt (åtminstone för mig) problem som jag skulle behöva lite tips om hur man kan lösa.
Det är så att jag behöver räkna ut tidsskillnaden i minuter mellan 2 st kända tidpunkter och ta hänsyn till om det infallit någon (eller flera) helg eller natt däremellan.
Förutsättningarna är som följer:
Jag har 2 st datumvärden dtArrived och dtReply (enligt formatet 2003-09-02 13:52:01)
dtReply är alltid senare än dtArrived.
Under vardagar skall tid mellan 18:00 och 06:00 nästkommande dag inte räknas med.
Under helger (lördag och söndag) skall ingen tid räknas.
Ett par exempel på hur det borde fungera:
Ex1: dtArrived är 2003-09-02 13:50:00 och dtReply är 2003-09-02 14:15:00
tidsdifferens skall då bli 25 minuter (ganska naturligt)
Ex2: dtArrived är 2003-09-01 17:55:00 och dtReply är 2003-09-02 06:15
tidsdifferens skall då bli 20 minuter (eftersom tid mellan 18 och 06 inte skall räknas med
Ex3: dtArrived är 2003-08-29 17:30:00 (en fredag) och dtReply är 2003-09-01 07:00:00
tidsdifferens skall då bli 90 minuter.
Någon som förstår vad jag är ute efter?
Ännu bättre om någon har tips på hur tusan jag ska bära mig åt för att beräkna fram detta på ett vettigt sätt.
Helst skulle jag vilja få fram det här korrekt oavsett mellan vilka 2 tidpunkter det rör sig om (dvs om man av någon anledning skulle ha mer än en veckas skillnad mellan datumen så skall den ändå räkna bort helger och 18-06) men om det inte är möjligt så räcker det med att man utgår från att den egentliga tidsskillnaden alltid är mindre än 1 vecka. (dvs det kan aldrig infalla mer än en helg mellan datumen)
*puh*Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Var det du då också ?Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Hittar inga bra sökord , jag vet att det finns löst här.Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
<code>
Dim dtArrived As Date
Dim dtReply As Date
Dim dtLoop As Date
Dim result As String
dtArrived = "2003-08-29 17:30:00"
dtReply = "2003-09-01 07:00:00"
Select Case DateDiff("D", dtArrived, dtReply)
Case 0
result = DateDiff("N", dtArrived, dtReply)
Case Is >= 1
result = DateDiff("N", dtArrived, FormatDateTime(dtArrived, vbShortDate) & " 18:00:00")
dtLoop = FormatDateTime(dtArrived, vbShortDate)
Do
dtLoop = DateAdd("D", 1, dtLoop)
If Weekday(dtLoop, vbMonday) = 6 Then
dtLoop = DateAdd("D", 2, dtLoop)
ElseIf Weekday(dtLoop, vbMonday) = 7 Then
dtLoop = DateAdd("D", 1, dtLoop)
Else
result = result + 720
End If
If dtLoop = FormatDateTime(dtReply, vbShortDate) Then
result = result + DateDiff("N", FormatDateTime(dtLoop, vbShortDate) & " 06:00:00", dtReply)
Exit Do
End If
Loop
End Select
MsgBox result
</code>Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Nu fungerar det finfint.Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Pröva gärna min lösning också:
Antag att vi har följande funktioner:
* week(t) ger veckonummer som tidpunkten t ligger i,
* day(t) ger veckodagen (måndag=0, ..., söndag=6),
* hour(t) ger timmen,
* minute(t) ger minuten,
* min(x, y) ger det minsta värdet av x och y.
Definiera funktionen
F(t) = 3600 * week(t) + 720 * min(5, day(t)) + 60 * min(12, hour(t)-6) + minute(t)
Den sökta förflutna "arbetsdagstiden" (i minuter) mellan tidpunkterna t1 och t2 (normalt med t2>t1) är då:
a(t1, t2) = F(t2) - F(t1)
Är tyvärr inte så hemma på VB numera, så du får själv göra om det till VB-kod.Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
<code>
Function min(x As Integer, y As Integer)
If x < y Then
min = x
Else
min = y
End If
End Function
Function week(t As Date)
week = DatePart("WW", t, vbMonday, vbUseSystem)
End Function
Function F(t As Date)
F = 3600 * week(t) + 720 * min(5, Weekday(t, vbMonday)) + 60 * min(12, Hour(t) - 6) + Minute(t)
End Function
Private Sub Form_Load()
MsgBox F("2003-09-01 07:00:00") - F("2003-08-29 17:30:00")
End Sub
</code>
OBS! Uppdaterad kodSv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Men Day skall nog bytas ut mot Weekday med någon modifiering [Weekday(t) - FirstDayOfWeek.Monday ?].
Verkar min kod fungera annars?Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
ändrade i koden i inlägget ovanför så att nu ska den nog stämma..Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Sv:Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Ett halvår sedan? Du menar inte detta två år tidigare?
http://pellesoft.se/communicate/forum/view.aspx?msgid=24365Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
Om man har något mellan 04:00 och 06:00 borde det bli 2h enligt formeln om jag inte tänker/läser fel. Jag vill ha in ett max(h(t)-6, 0) istället för h(t).Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä
min(12, hour(t)-6)
borde enl mig vara
min(12, max(hour(t)-6, 0))Sv:Beräkna tidsdifferens, med hänsyn till helgdagar och "nä