webForumDet fria alternativet

Är datum ett datum eller inte?

Flash

7 svar · 562 visningar · startad av saturday

Medlem sedan jan. 2007133 inlägg
Frågan#1

Hej,

Jag ha ett problem. Jag har en kod som ser ut så här:

var_Typed = new Date(myYear.text,myMonth.text,myDate.text)

var_Today = new Date();

differenceMilliseconds = var_Today - var_Typed;

difference_days = Math.floor(differenceMilliseconds/86017698.6447148);
difference_days = difference_days - 3;
difference_years = difference_days/365

if(difference_years < 18) {
	gotoAndStop(1);
	varning="YOU ARE TO YOUNG!"
} else {
	gotoAndStop(3);
}

Vad det gör är att kolla om en person är ~18 år eller inte. Det är tre fält som datumet hämtas ifrån.

Detta fungerar kalas. Dvs, är man för ung kommer man inte igenom. Men nu kommer mitt problem; Om man inte fyller i något, dvs om myYear, myMonth och myDate är tomma kommer man rätt igenom scriptet.

Jag behöver alltså kolla om fälten innehåller något eller inte. Jag har inte lyckats hittills. Jag har sökt igenom flashhjälpen för att se om det finns någon "isDate" eller liknande, men utan framgång. Jag har prövat att göra om var_Typed till en sträng och kört "if (var_Typed = "")" men inte heller det verkar vilja fungera. Vad är ett datum och hur kan jag kolla om det är sant eller falskt i ActionScript? Vad jag vill göra, förutom åldersgränsen jag redan kollar, är att kolla så att myYear, myMonth och myDate är ifyllt - eller att var_Typed är ett datum, annars ska man inte komma igenom.

Medlem sedan maj 2005704 inlägg
#2

Värden du matar in i date funktionen skall vara nummer.
För att omvandla strängarna i text fälten till nummer kan du köra Number() funktionen.
Då kommer var_Typed.valueOf() vara NaN om det inmatade värdet inte är ett giltligt datum.

Medlem sedan jan. 2007133 inlägg
#3

Det går bara att fylla i nummer i fälten så det är bara nummer som kommer in i variablerna. Så jag behöver inte kolla extra, så att säga, om det är nummer eller bokstäver som kommer in. Men frågan är fortfarande hur jag kollar om fälten är ifyllda eller ej?

Medlem sedan maj 2005704 inlägg
#4

Ett textfält är alltid en sträng, oavsett om du fyller i siffror eller inte.
För att date skall funka korrekt skall det vara värden av typen nummer, annars får du den typ av problem du upplever.

Du kan kolla om ett fält är ifyllt med hjälp av myYear.text.length>0, men det är smidigare att att använda date objektet för att kolla om de ifyllda värderna är ett giltligt datum.

var year:Number = myYear.text;
var month:Number = Number(myMonth.text)-1; // 0 = Januari
var date:Number = myDate.text;

var var_Typed:Date = new Date(year, month, date);

if(!isNaN(var_Typed.valueOf())){
    // valid date
}
Medlem sedan jan. 2007133 inlägg
#5

Ordnade sig! tack för hjälpen Blixt, du är som vanligt vass på Actionsript. :)

Medlem sedan maj 2005704 inlägg
#6

Kanon!
Sättet jag skulle göra kollen på om du vill vara säker på att det inte diffar på skottdagar:

var now:Date=new Date();
var limitDate:Date = new Date(now.getFullYear()-18, now.getMonth(), now.getDate()); 
if(varTyped.valueOf() > limitDate.valueOf()) {
	gotoAndStop(1);
	varning="YOU ARE TO YOUNG!";
} else {
	gotoAndStop(3);
}
Medlem sedan jan. 2007133 inlägg
#7

Sjukt bra! Ännu bättre kod än den jag försökt pilla ihop med millisekunder osv. :) Ännu en gång, tack!

Medlem sedan maj 2005704 inlägg
#8

Du är välkommen.
Dock ser jag en liten miss...om du vill att man skall komma in på sin 18-års dag får du ändra till:
if(varTyped.valueOf() >= limitDate.valueOf()) {

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