webForumDet fria alternativet

Datum, fyller år, ARghh igen

10 svar · 291 visningar · startad av nill

nillMedlem sedan okt. 2001387 inlägg
#1

Har förstått att min kod som ska berätta hur många månader och dagar det är till någon fyller inte alls är bra. Här kommer det ska vara med först:

If (RecSet("born") \<\> "") Then

	ReplaceStr = Replace(RecSet("born"), " ", "")
	Fyller = right(left(ReplaceStr, 6), 4)
	Ratt = isNumeric(Fyller)
End If
If (Len(Fyller) = 4) And (Ratt = True) Then

Fyller har nu ett värde t.ex. 0206.
min kod fungerade så innan att den gjorde om det till 2002-02-06. och tog datediff("m" och "d". men det blir heltokigt. Stämde ju till viss del men sen måste man ju ta differensen av månader och dagar mm och det vet jag inte hur man gör.
Så om någon kunde hjälpa mig med lite kod skulle jag vara tacksam :)

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Hur ser värdena i recset("born") ut?

------------------
essentitia preter non sans multiplicandum

nillMedlem sedan okt. 2001387 inlägg
#3

det är lite olika beroende på vad de skrivit in.
men det är tänkt att if-satsen ska sortera ut det där de står t.ex. 830206-2323 där de sex första är de enda viktiga här.

EclipseMedlem sedan juli 20003 825 inlägg
#4

Jag tycker parantesen ser lite konstig ut...

If (RecSet("born") <> "") Then

Mitt förslag:
If RecSet("born") <> "" Then

Eller är det min okunskap som spökar!? :-)

@ndersMedlem sedan juni 200032 969 inlägg
#5

Parentesen får vara där, det spelar mindre roll. :)

Mvh,

------------------
Don't panic!

nillMedlem sedan okt. 2001387 inlägg
#6

spelar ingen roll... () var till för att det ska se snyggare ut/vara lättare att läsa :)

LarsGMedlem sedan dec. 200012 464 inlägg
#7
dob = left(recset("born"),6)
if isNumeric(dob) then
m = mid(dob,2,2)
d = mid(dob,4,2)
y = year(date)
birthday = cdate(y & "-" & m & "-" & d) 
days = datediff("d",birthday,date)
if days < 0 then
'fyller nästa år
days = datediff("d",birthday,dateadd("yyyy",1,date))
end if
response.write days & " dagar kvar"
end if

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 06 dec 2001]

nillMedlem sedan okt. 2001387 inlägg
#8

det där fungerade inte alls :/
men jag lärde mig lite.

Jag kan också få ut antalet dagar, fast nu jag vill ha det i månader och dagar. inte bara dagar.

det är det som krånglar till det

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Nej, det var ett riktigt bottennapp.


dim dob,m,d,y,birthday,days,months
dob = left(recset("born"),6)
'
'dob förutsätts vara i 
' formatet yymmdd
'
if isNumeric(dob) then
   d = mid(dob,5,2)
   m = mid(dob,3,2)
   y = cstr(year(date))
   birthday = y & "-" & m & "-" & d

   if isdate(birthday) then
      birthday = cdate(birthday) 
      days = datediff("d",date,birthday)
      if days < 0 then
         birthday = dateadd("yyyy",1,birthday)
      end if
      months = datediff("m",date,birthday)
      days = datediff("d",dateadd("m",months,date),birthday)
      if datediff("d",birthday,dateadd("m",months,date)) > 0 then months = months - 1
      days = datediff("d",dateadd("m",months,date),birthday)
   end if
   response.write months & " månader och " & days & " dagar kvar"
end if

------------------
essentitia preter non sans multiplicandum

nillMedlem sedan okt. 2001387 inlägg
#10

jo den koden var inte helt fel. Men lite. Om dagens datum är MER än datumet när personen fyller år blir det tokigt. Typ istället för 1 månad och 29 dagar blir det 1 månad och -1 dag.

och sen så förstår jag inte dessa rader:

Dagar = Datediff("d",Dateadd("m",Months,Date),Birthday

If Datediff("d",birthday,dateadd("m", Months, Date)) > 0 Then Months = Months - 1

Om du kunde förklara lite hur de funkar. Dateadd innne i datediffen alltså... :)

LarsGMedlem sedan dec. 200012 464 inlägg
#11

Jaha, jag tyckte jag testade ut det fallet, men men ..

Jo, datediff med månader avrundar väl värdet så att om det är 50 dagar så får man 2 månader. Tanken var att om jag lägger på antalet månader och det värdet är större än födelsedatumet så innebär det att man har fått en avrundning uppåt och i så fall tar jag bort en månad.
Det verkar dock som om det blir något problem precis i skarven. Det hänger säkert ihop med att månader har olika längd. Jag har ingen direkt lösning.

------------------
essentitia preter non sans multiplicandum

470 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
467 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
308 ms — hämta tråd, inlägg och bilagor (db)