Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Beräkna tidsdifferens, med hänsyn till helgdagar och "nätter

Postades av 2003-09-02 13:56:18 - Magnus Olofsson, i forum visual basic - allmänt, Tråden har 15 Kommentarer och lästs av 6161 personer

Hej på er.
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*


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-02 14:21:26 - Sven Åke Persson

Exakt det problemmet löste Vi för ett halvår sedan här.
Var det du då också ?


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-02 14:23:51 - Magnus Olofsson

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.


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-02 14:39:12 - Sven Åke Persson

Jag också, kommer så väl ihåg hur vi satt och löste exakt detta.
Hittar inga bra sökord , jag vet att det finns löst här.


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-02 14:49:06 - Fredik Johnsson

så här löste jag det, tror det ska fungera
<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>


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-02 18:00:06 - Magnus Olofsson

Tack för hjälpen!
Nu fungerar det finfint.


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-02 18:54:25 - Per Persson

Det verkar en aning ineffektivt med en loop...

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.


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-03 10:24:11 - Fredik Johnsson

här kommer VB-koden för Per's lösning..
<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 kod


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-04 00:41:36 - Per Persson

Bra att du tog dig tid!

Men Day skall nog bytas ut mot Weekday med någon modifiering [Weekday(t) - FirstDayOfWeek.Monday ?].

Verkar min kod fungera annars?


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-04 09:09:48 - Fredik Johnsson

det har du fullständigt rätt i! det missade jag..
ändrade i koden i inlägget ovanför så att nu ska den nog stämma..


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2003-09-09 07:41:31 - Magnus Olofsson

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!


Svara

Sv:Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2011-11-27 19:06:57 - Per Persson

<b>Exakt det problemmet löste Vi för ett halvår sedan här.</b>
Ett halvår sedan? Du menar inte detta två år tidigare?
http://pellesoft.se/communicate/forum/view.aspx?msgid=24365


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2011-11-28 17:45:05 - Niklas Jansson

Funkar verkligen det där?

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).


Svara

Sv:Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2011-11-30 07:40:04 - Per Persson

h(t)? Var ser du h(t)?


Svara

Sv: Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2011-11-30 19:25:40 - Niklas Jansson

Men för helvete...

min(12, hour(t)-6)

borde enl mig vara

min(12, max(hour(t)-6, 0))


Svara

Sv:Beräkna tidsdifferens, med hänsyn till helgdagar och "nä

Postades av 2011-11-30 22:18:24 - Per Persson

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.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 169
27 953
271 705
551
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies