webForumDet fria alternativet

Avrunda till närmaste femte minut

ASP

18 svar · 484 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Frågan#1

Jag vill avrunda en tid i formatet 11.25 till närmaste femte minut.
11.58 ska alltså bli 12.00 och 11.57 ska bli 11.55.

Någon som kan hjälpa mig? :)

Medlem sedan maj 2001431 inlägg
#2

kanske ngt sånt här?

klockslag= "20:02"
minuter = right(klockslag,2)
antalfemmor = int((minuter+2)/5)

If antalfemmor =12 Then
nytt_klockslag = Time(hour(klockslag)+1 & ":00")
Else
nytt_klockslag = Time(hour(klockslag) & ":" & antalfemmor*5)
End If

red: la till villkor om det blir ny timme...

Medlem sedan okt. 20005 273 inlägg
#3
[red]
Function GetRightTime(byVal dteTime)
	If IsDate(dteTime) Then
		Select Case Right(Minute(dteTime),1)
			Case "1" , "6"
			GetRightTime = FormatDateTime(DateAdd("n", -1, dteTime),4)
			Case "2" , "7"
			GetRightTime = FormatDateTime(DateAdd("n", -2, dteTime),4)
			Case "3" , "8"
			GetRightTime = FormatDateTime(DateAdd("n", 2, dteTime),4)
			Case "4" , "9"
			GetRightTime = FormatDateTime(DateAdd("n", 1, dteTime),4)
			Case Else
			GetRightTime = FormatDateTime(dtetime,4)
		End Select
	Else
		Response.Write "Det måste vara ett giltigt datum"	
	End If
End Function	
	[/red]

......JAg vet inte hur den funkar vid timmar men jag tror den ska funka..........

Red. Jag la till så du fick rätt format på tiden :)

Medlem sedan maj 200010 687 inlägg
#4

Massa case satser? :o

Nä, får väl fixa till en egen funktion då...

Medlem sedan okt. 20005 273 inlägg
#5

Ursprungligen av Erik Juhlin **Massa case satser? :o

Nä, får väl fixa till en egen funktion då...**

Uhh du har ju en funktion som är klockren där ;)

Medlem sedan maj 200010 687 inlägg
#6

En lite mer generell funktion utan massa case satser...

Function RoundNearestMin(ByVal dDate, ByVal lRoundTo)
	dDate = CDate(dDate)
	lRoundTo = CLng(lRoundTo)
	
	If lRoundTo <= 60 Then
		
		Dim lHour, lMinute
		lHour = Hour(dDate)
		lMinute = Minute(dDate)
		
		lMinute = CLng(lMinute / lRoundTo) * lRoundTo
		
		lHour = (lHour + Fix(lMinute / 60)) Mod 24
		lMinute = lMinute Mod 60
		
		RoundNearestMin = CDate(Year(dDate) & "-" & Month(dDate) & " " & Day(dDate) & " " & lHour & ":" & lMinute)
		
	End If
	
End Function

Response.Write RoundNearestMin(CDate("2001-06-06 23:59:23"), 5)

Redigering: Förfinat ett antal gånger. :)

Medlem sedan okt. 20005 273 inlägg
#7

Jag tycker min var finare.... ;)

Medlem sedan maj 200010 687 inlägg
#8

Du hårdkodar ju in vilket tal den ska adderas/divideras med.
Sen så funkar det inte om man t.ex. vill ha närmaste nionde minut med din. Vill man att det ska funka med det så blir det en jäkla massa hårdkodningar.

Min är mer generell och bättre skriven, så är det. :p

Medlem sedan mars 2002777 inlägg
#9

Ursprungligen av icaaq Jag tycker min var finare.... ;)

Jag också ;)

Medlem sedan maj 200010 687 inlägg
#10

Men kom igen, ni är väl ironiska? :q :o

Medlem sedan maj 2001431 inlägg
#11
    klockslag = Time
    minuter = Minute(klockslag)
    antalfemmor = Int(((minuter) + 2) / 5)
    
    If antalfemmor = 12 Then
        nytt_klockslag = Time(Hour(klockslag) + 1 & ":00")
    Else
        nytt_klockslag = Hour(klockslag) & ":" & Right("0" & CInt(antalfemmor * 5), 2)
    End If

red: la till villkor om det blir ny timme + rättade :)

Medlem sedan maj 2001431 inlägg
#12

hehe är det inte lite overkill att kunna avrunda till närmaste 9-minut? Snyggt men är det användbart?

Medlem sedan maj 200010 687 inlägg
#13

Den funktionen fungerar ju inte särskilt bra. Kan t.ex. Bli 24:00. Finns ej...

Medlem sedan maj 2001431 inlägg
#14

Det är ju inte ens en funktion - mest ett uppkas. men ok då det är ju bara lägga till.

    klockslag = CDate("23:59:12")
    minuter = Minute(klockslag)
    timmar = Hour(klockslag)
    antalfemmor = Int(((minuter) + 2) / 5)
    
    If antalfemmor = 12 Then
        nytt_klockslag = Hour(timmar + 1) & ":00"
    Else
        nytt_klockslag = timmar & ":" & Right("0" & CInt(antalfemmor * 5), 2)
    End If
Medlem sedan okt. 20005 273 inlägg
#15

Re: Avrunda till närmaste femte minut

Ursprungligen av Erik Juhlin **Jag vill avrunda en tid i formatet 11.25 till närmaste femte minut.
11.58 ska alltså bli 12.00 och 11.57 ska bli 11.55.

Någon som kan hjälpa mig? :)**

Och det var det du fick ;) .....

Medlem sedan maj 2001431 inlägg
#16

En lite mer kompakt version

Function minutintervall(ByVal datum, ByVal intervall)
    minutintervall = TimeValue(DateAdd("n", (Int((Minute(datum) + Int(intervall / 2)) / intervall) * intervall - Minute(datum)), Hour(datum) & ":" & Minute(datum)))
End Function
Medlem sedan maj 200010 687 inlägg
#17

Men jag fick ju en ful äckelfunktion ju... :x

Medlem sedan okt. 20005 273 inlägg
#18

JAg vet inte om jag gillar atityden på denna tråd.........

Medlem sedan maj 200010 687 inlägg
#19

Sorry, var väl lite ironisk... :)
När jag frågade här så letade jag efter ett smidigt sätt att avrunda tal. Men det finns visst inte. :)

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)