---
title: "Åldersgräns på bokning"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/166309-åldersgräns-på-bokning"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "MickeA.com"
published: "2007-11-11T22:36:06.000Z"
updated: "2007-11-14T06:57:14.000Z"
replies: 14
views: 988
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/166309-åldersgräns-på-bokning"
---

# Åldersgräns på bokning

## #1 — MickeA.com, 2007-11-11T22:36Z

Tjena,
Jag utför på en hemsida en ålderskontroll, där personer som inte fyllt fyra år ska "blockeras".
Nu har jag sökt runt här i forumet och hittat en del saker för att räkna ut en viss ålder.
Men i det här fallet behövs det något mer, om man tar dagens datum som exempel, ska personer som är födda \_innan\_ (och inkl.) 2003-11-11 kunna anmälda sig, men någon som är född 2003-12-01 ska blockeras, eftersom denna inte fyllt 4 ännu.

Såhär har jag gjort:

```
'# age_format är ett personnummer i formen 'yy-mm-dd'
age_format = Mid(sec_number_a, 1, 2) & "-" & Mid(sec_number_a, 3, 2) & "-" & Mid(sec_number_a, 5, 2)
If Int(DateDiff("d",age_format,Date()) / 365.25) < 4 Then
'#	Stopp!
Else
'#	Fortsätt
End If
```

Problemet här är att den går på hela år, så att man måste vara född tidigare än -03 för att det här ska "funka".
Jag behöver ut hur många dagar 4 år är, ta det minus dagens datum och sen se när personen är född, eller hur?

Hur löser jag smidigast det här?

Tack!

Permalänk: https://www.webforum.nu/p/166309

## #2 — tydal, 2007-11-11T22:42Z

Smidigast tycker jag är att tänka på hur man skulle ha löst i huvudet, alltså utan dator...

Hur gör du själv för att kolla om någon är yngre är 4 år?

Jo, du tittar ju på årtalet först. Är det 2004, 2005, 2006 eller 2007 så behöver du ju inte kolla något mer, för då vet du ju.

Likaså om årtalet är 2002 eller äldre, då behöver du ju heller inte kolla mer...

Det är bara om det är 2003 som du måste göra en ytterligare koll. Då börjar du att titta på månaden. Är det något annat än november så vet du. Är det november får du även kolla datumet.

Permalänk: https://www.webforum.nu/p/2051112

## #3 — Poffe, 2007-11-12T00:31Z

Int avrundar väll om jag inte minns helt fel till närmaste heltal. I ditt exempel så blir ju summan av din uträkning runt 3,91... vilket alltså avrundas till 4. Testa att byta ut Int mot CDbl så borde det fungera eftersom du då får med decimalerna.

```
If [b]CDbl[/b](DateDiff("d",age_format,Date()) / 365.25) [b]<[/b] 4 Then
'#	Stopp!
Else
'#	Fortsätt
End If
```

Eller helt enkelt skriva in antalet dagar direkt, vilket jag tycker verkar enklast:

```
If DateDiff("d",age_format,Date()) [b]<[/b] 1461 Then
'#	Stopp!
Else
'#	Fortsätt
End If
```

Permalänk: https://www.webforum.nu/p/2051119

## #4 — CatZ, 2007-11-12T12:29Z

Precis som Tydal skriver. Dela upp deras födelsedatum i 3 delar (år, månad, dag)

Sedan jämför du året med lägsta tillåtna sedan månad och sist dag om det skulle behövas.

Permalänk: https://www.webforum.nu/p/2051167

## #5 — MickeA.com, 2007-11-12T12:41Z

Okej, vad är det som gör att Poffe's lösning inte är bra, eller rättare sagt, vad gör den andra varianten bättre?

Permalänk: https://www.webforum.nu/p/2051168

## #6 — MickeA.com, 2007-11-12T23:29Z

Okej, nu har valt varianten som Tydal först nämnde, tänkte nog sätta ihop en funktion av det, som ger true resp. false i retur.
Personnumret anger man i formatet *yymmdd-nnnn*.

Finns det något smidigt sätt att till att börja med kontrollera året?
*Datepart("yyyy", Date())* ger ju året i formatet yyyy, finns det något sätt att få året som yy (tex. 03,eller 94) så att det går att räkna ut det här på ett bra sätt?

Over and out... :)

Permalänk: https://www.webforum.nu/p/2051297

## #7 — tydal, 2007-11-12T23:49Z

Min lösning är bra för att den är enkel och exakt. Det är lätt att inse hur den fungerar och att den fungerar som du vill.

Poffes lösningar använder avrundade värden (365,25 och 1461) och med avrundade värden får man ett ungefärligt svar, med en viss felmarginal.

Utan att kunna asp skulle jag gissa att Datepart("yy", Date()) kanske ger året med två siffror. Annars är det ju bara att du drar bort 2000.

Permalänk: https://www.webforum.nu/p/2051299

## #8 — Poffe, 2007-11-13T04:19Z

> **tydal skrev:**
>
> Poffes lösningar använder avrundade värden (365,25 och 1461) och med avrundade värden får man ett ungefärligt svar, med en viss felmarginal.

Nja, handlar det om 4 år så är det väll 1461 dagar. Så det borde ju bli ganska exakt. Men handlar det om 3 år eller 6 år eller liknande kan det ju bli fel om man inte tar med i beräkningen när skottåret är. Men 4 år är väll ändå alltid 1461 dagar, oavsett vilket av åren skottåret infaller?

Permalänk: https://www.webforum.nu/p/2051301

## #9 — i2n2, 2007-11-13T12:46Z

> Poffes lösningar använder...

Eftersom jag är amatör (har inte skrivit en rad asp kod) så föreslå jag en If-sats enligt principen 

```
If DateDiff("d",age_format, DateAdd("yyyy",4,Date())) < 0 Then
'#	Stopp!
Else
'#	Fortsätt
End If
```

då använder man den underliggande DateAdd (som enligt min tolkning av manualen hanterar skottår, dvs är det proffs som jag lutar mig mot för att få korrekt datumberäkning) och som är generaliserbar så att 4 kan ersättas med ett godtyckligt antal år.

Permalänk: https://www.webforum.nu/p/2051358

## #10 — MickeA.com, 2007-11-13T20:36Z

> **tydal skrev:**
>
> Utan att kunna asp skulle jag gissa att Datepart("yy", Date()) kanske ger året med två siffror. Annars är det ju bara att du drar bort 2000.

Nepps, just det som är problemet :)
Det finns inte "yy" i ASP, så jag måste komma på ett bra sätt att lösa det här.
Vissa kanske anger "01" som år, hur ska jag då ta reda på att det inte är "1901" utan "2001" ?

Kanske ett dumt exempel, men det här måste funka, det får inte finnas utrymmet för missar i just det här steget.

Permalänk: https://www.webforum.nu/p/2051468

## #11 — i2n2, 2007-11-13T21:48Z

Ursäkta, logiskt fel av mig i tidigare inlägg eftersom jag bara tänkte i principer och inte inte använder asp så att jag kan testa. 4 år skall naturligtvis läggas till age_format (födelsedatum) och detta datum skall jämföras med dagens datum. Så den otestade principlösningen blir

```
If DateDiff("d",Date(), DateAdd("yyyy",4,age_format)) < 0 Then
'#	Stopp!
Else
'#	Fortsätt
End If
```

Fungerar inte detta i asp miljö?

Permalänk: https://www.webforum.nu/p/2051479

## #12 — tydal, 2007-11-13T22:22Z

> **MickeA.com skrev:**
>
> Vissa kanske anger "01" som år, hur ska jag då ta reda på att det inte är "1901" utan "2001" ?

I personnummer så har man ett plustecken mellan födelsedatum och födelsenummer om man är 100 år eller äldre. Är man yngre så har man ett minustecken.

Det bästa är dock att ange årtal med fyra siffror.

Permalänk: https://www.webforum.nu/p/2051489

## #13 — tydal, 2007-11-13T22:27Z

> **Poffe skrev:**
>
> Men 4 år är väll ändå alltid 1461 dagar, oavsett vilket av åren skottåret infaller?

Nej, för skottår infaller inte vart hundrade år, bara vart fyrhundrade. Så 1900 var inget skottår medan däremot 2000 var det.

Permalänk: https://www.webforum.nu/p/2051490

## #14 — Poffe, 2007-11-14T05:37Z

> **tydal skrev:**
>
> Nej, för skottår infaller inte vart hundrade år, bara vart fyrhundrade. Så 1900 var inget skottår medan däremot 2000 var det.

Åfan, så skottår är alltså inte alltid var 4:e år. Då har man lärt sig något nytt :)

Dock så borde väll i2n2:s förslag fungera utan att behöva dela upp kontrollen i tre steg.

Permalänk: https://www.webforum.nu/p/2051502

## #15 — @nders, 2007-11-14T06:57Z

> **Poffe skrev:**
>
> Dock så borde väll i2n2:s förslag fungera utan att behöva dela upp kontrollen i tre steg.

Ja, den ser ut att fungera bra, så länge du ser till att *age_format* är ett giltigt datum av *datumtyp*. Se till att subtypskonvertera alltså, så blir det nog bra.

Permalänk: https://www.webforum.nu/p/2051510

---

Tråden på webben: https://www.webforum.nu/amne/asp/166309-åldersgräns-på-bokning
