/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Tjek indold af form inden afsendelse
Fra : Is


Dato : 15-08-10 19:55

Hej igen

Stig har tidligere hjulpet med at validere nogle indtastningsfelter
inden afsendelse. de virker godt, jeg vel bare gerne have ændret på dem,
og det kan jeg ikke få til at virke.

det drejer sig om alder.
i nogle felter kan man vælge dato, måned og år. dette skal tjekkes om
det passer til valget modul.

siden er her:
http://dch-haslev.dk/jmail-test/test.asp
og som txt
http://dch-haslev.dk/jmail-test/test.asp.txt

tjek af alder starter ca i linje 265

i stedet for en fast alder f.eks 6 måneder, vil jeg hente kriterierne
fra en datafase i form af "født efter" og "født før"

og dem har jeg at i i denne
http://dch-haslev.dk/jmail-test/tjekdatopladser.asp
og som txt
http://dch-haslev.dk/jmail-test/tjekdatopladser.asp.txt

data fra databasen hentes her.
http://dch-haslev.dk/jmail-test/antal.inc.txt


hvordan får jeg det til at virke ??

mvh Erik

 
 
Jens Peter Karlsen (16-08-2010)
Kommentar
Fra : Jens Peter Karlsen


Dato : 16-08-10 10:34

Der er nogle fejl.
var hundyy = document.forms[0].y1.value;
var hundm = hundyy * 12; //FEJL

y1 indeholder selve året så dit regnestykke giver et vildt højt antal
måneder. så gamle bliver ingen hunde.
Du skal bruge din getYear funktion til at finde det aktuelle år og
trække fødselsåret fra så du får antallet af år.

var hundyy = nuyy - (document.forms[0].y1.value);
var hundm = hundyy * 12; //stadig fejl her.

Så er der problemet med at de er født sidste år men for mindre end 12
måneder siden. Her bruges getmonth til at lave en beregning på dette.

if(numm - mm >= 0) // over eller præcis 1 år
    var hundm = hundyy * 12;
   hundm += numm - mm; //læg overskydende antal måneder til.

Jeg tror nok ovenstående er rigtigt men tjek lige logikken.

if ( minkritid && minkritid < hundald) {

Det giver ingen mening at AND'e en variabel med sig selv.

Det ville være meget enklere hvis du spurgte hvor gammel hunden var i
år og måneder.

Regards Jens Peter Karlsen.

On Sun, 15 Aug 2010 20:55:07 +0200, Is <erikisager@mail.dk> wrote:
>tjek af alder starter ca i linje 265
>
>i stedet for en fast alder f.eks 6 måneder, vil jeg hente kriterierne
>fra en datafase i form af "født efter" og "født før"

Birger Sørensen (16-08-2010)
Kommentar
Fra : Birger Sørensen


Dato : 16-08-10 11:13

Jens Peter Karlsen har bragt dette til verden:

Uden at have gået i dybden med den egentlige problematik, har jeg et
par kommentarer:

8X
> Du skal bruge din getYear funktion til at finde det aktuelle år og
> trække fødselsåret fra så du får antallet af år.
>
> var hundyy = nuyy - (document.forms[0].y1.value);
> var hundm = hundyy * 12; //stadig fejl her.

getYear er deprecated. Brug getFullYear i stedet.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

> Så er der problemet med at de er født sidste år men for mindre end 12
> måneder siden. Her bruges getmonth til at lave en beregning på dette.
> if(numm - mm >= 0) // over eller præcis 1 år
> var hundm = hundyy * 12;
> hundm += numm - mm; //læg overskydende antal måneder til.

Jeg kan nu ikke se, at de angivne eksempler anvender hverken getYear
eller getMonth. Det må antages at de så bruges til at sætte nogle af de
variable der anvendes.
Vær så opmærksom på, at getMonth returnerer 0-11, og ikke som man
skulle forvente 1-12.

8X
> if ( minkritid && minkritid < hundald) {
> Det giver ingen mening at AND'e en variabel med sig selv.

Hvad er resultatet, hvis minkritid ikke er defineret?
Der menes formentlig
if ( minkritid && ( minkritid < hundald)) {

> Det ville være meget enklere hvis du spurgte hvor gammel hunden var i
> år og måneder.

Det vil kræve en samtidig registrering af hvilken dato der registreres
- eller et aldrig afsluttet arbejde med at opdatere (dagligt cronjob) -
eller en umiddelbar omregning af fødselsdagen til et data-format der
kan anvendes i den aktuelle applikation. Og det er vist det sidste der
her er tale om at forsøge...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Jens Peter Karlsen (16-08-2010)
Kommentar
Fra : Jens Peter Karlsen


Dato : 16-08-10 23:06

Det kan ganske rigtigt ikke ses direkte af det jeg skrev men læser man
koden som der blev linket til ser man de anvendes til de nævnte
variabler.

Regards Jens Peter Karlsen.

On Mon, 16 Aug 2010 12:13:21 +0200, Birger Sørensen
<sdc@bbsorensen.com> wrote:

>Jeg kan nu ikke se, at de angivne eksempler anvender hverken getYear
>eller getMonth. Det må antages at de så bruges til at sætte nogle af de
>variable der anvendes.

Is (16-08-2010)
Kommentar
Fra : Is


Dato : 16-08-10 19:50

Den 16-08-2010 11:34, Jens Peter Karlsen skrev:
> Der er nogle fejl.
> var hundyy = document.forms[0].y1.value;
> var hundm = hundyy * 12; //FEJL
>
> y1 indeholder selve året så dit regnestykke giver et vildt højt antal
> måneder. så gamle bliver ingen hunde.
> Du skal bruge din getYear funktion til at finde det aktuelle år og
> trække fødselsåret fra så du får antallet af år.
>


så gammel er hunden i måneder (regnet fra kalenderstart, er det ikke år
1900 ? ))
//find hunds alder i mdr

var hundyy = document.forms[0].y1.value;
var hundm = hundyy * 12;
var hundmm = mm;
var hundald = hundmm + hundm;

ok ????


i dag i måneder

//uddrager år
var nuyy = nu.getFullYear();

//uddrager mdr
var numm = nu.getMonth();
numm = numm + 1;

// udregner nutid til antal mdr
var nutidyy = nuyy * 12;
var nutidmd = nutidyy + numm;

OK ???

Max alder for modul 1 (max 6 måneder)

if (modulnr==1) var maxkritid = nutidmd - 6;

det mener jeg også er ok ??? det virker i hvert fald som jeg ønskede
dengang jeg/vi lavede det.


man lad os se fremad

nu vil jeg i stedet hente maxkritid og minkritid fra databasen, og jeg
har fat i dem her:(de 2 sidste)

   While not rspladser.eof

   mArray(rspladser("modul")-1) = rspladser("antalpladser")
   modulArray(rspladser("modul")-1) = rspladser("modul")
   txt01Array(rspladser("modul")-1) = rspladser("txt01")
   datoArray(rspladser("modul")-1) = rspladser("startdato")
   ffdatoArray(rspladser("modul")-1) = rspladser("foedt-foer")
   fedatoArray(rspladser("modul")-1) = rspladser("foedt-efter")

   rspladser.MoveNext

   wend

så maxkritid og minkritid for modul 3 er her:

if (modulnr==3) { var maxkritid = ffdatoArray(2); var minkritid =
fedatoArray(2); }

tror jeg nok, de skrives i hvert fald her:

http://dch-haslev.dk/jmail-test/tjekdatopladser.asp


hvad gør jeg så ?????


jeg skal have sat valgte for hund født sammen, så det er en dato.

og derefter undersøge om datoen er inden for kriterierne

(er der en smart måde man kan vælge dato på i en kalender, lige som man
kan i access nu ? )

mvh Erik

Jens Peter Karlsen (17-08-2010)
Kommentar
Fra : Jens Peter Karlsen


Dato : 17-08-10 00:21

Se inline.

On Mon, 16 Aug 2010 20:50:22 +0200, Is <erikisager@mail.dk> wrote:

>//find hunds alder i mdr
>
> var hundyy = document.forms[0].y1.value;
> var hundm = hundyy * 12;
> var hundmm = mm;
> var hundald = hundmm + hundm;
>
>ok ????

Nej. giver 2010 gange 12 = 12240 måneder.
Til at få antal år hunden er, bruger du i stedet:
var hundyy = nuyy - (document.forms[0].y1.value);

>// udregner nutid til antal mdr
> var nutidyy = nuyy * 12;
> var nutidmd = nutidyy + numm;
>
>OK ???

Tager ikke højde for at selv om hunden blev født sidste år er den
måske endnu ikke et år. F.eks kan den være født i December hvor vi nu
skriver August. Altså kun 9 måneder.
For at beregne dette kan du bruge:

var months = (12 - mm) + numm;
Først regnes der på antal måneder fra fødsel til nytår dertil lægges
indeværende måned i tal.
Så skal du have undersøgt om hunden med sikkerhed er over et år og
omregne disse til antal måneder og lægge antallet af måneder fundet
ovenfor til.

if(hundyy - 1 > 0)
   var totalmonths;
   totalmonths = months + ((hundyy - 1) * 12)

>nu vil jeg i stedet hente maxkritid og minkritid fra databasen, og jeg
>har fat i dem her:(de 2 sidste)
>
>   ffdatoArray(rspladser("modul")-1) = rspladser("foedt-foer")
>   fedatoArray(rspladser("modul")-1) = rspladser("foedt-efter")

Hvorfor egentlig? Er de ikke rimeligt statiske?
Hvad indeholder de to felter nærmere bestemt?

>hvad gør jeg så ?????

jeg har svært ved at se hvorfor det skal gøres så besværligt hvis du
spørger om alder i antal år og måneder er det ligetil at regne på.
Du regner nu simpelt på om de er for unge eller gamle til et givent
modul ved at se om totalmonths falder inden for rammerne.

>Max alder for modul 1 (max 6 måneder)
>
> if (modulnr==1) var maxkritid = nutidmd - 6;

Dette skal så være:

if (modulnr==1)
   if(totalmonths - 6 > 0)


Håber det hjælper dig på vej.

Jens Peter Karlsen (17-08-2010)
Kommentar
Fra : Jens Peter Karlsen


Dato : 17-08-10 00:36

Beklager fik trykket send lidt for tidligt.

if (modulnr==1)
   if(totalmonths - 18 > 0) //er hunden over 18 måneder?
   alert ('Din hund er for gammel til dette modul ! ' );
   if(totalmonths - 6 < 0) //er hunden under 6 måneder?
   alert ('Din hund er for ung til dette modul ! ' );
else
//Ok at tilmelde

Samme for øvrige moduler

Regards Jens Peter Karlsen.

On Tue, 17 Aug 2010 01:20:55 +0200, Jens Peter Karlsen
<jpkarlsen@mvps.org> wrote:

> if (modulnr==1)
>   if(totalmonths - 6 > 0)
>
>
>Håber det hjælper dig på vej.

Is (17-08-2010)
Kommentar
Fra : Is


Dato : 17-08-10 22:59

Den 17-08-2010 01:20, Jens Peter Karlsen skrev:
> Se inline.
>
> On Mon, 16 Aug 2010 20:50:22 +0200, Is<erikisager@mail.dk> wrote:
>
>> //find hunds alder i mdr
>>
>> var hundyy = document.forms[0].y1.value;
>> var hundm = hundyy * 12;
>> var hundmm = mm;
>> var hundald = hundmm + hundm;
>>
>> ok ????
>
> Nej. giver 2010 gange 12 = 12240 måneder.


ja det kan jeg godt se, der er noget galt med det jeg laver

jeg kigger lidt mere på det du har skrevet, og vender tilbage onsdag
eller torsdag

mvh Erik

Is (22-08-2010)
Kommentar
Fra : Is


Dato : 22-08-10 20:18

Den 17-08-2010 01:20, Jens Peter Karlsen skrev:

så er jeg tilbage igen

>
>> nu vil jeg i stedet hente maxkritid og minkritid fra databasen, og jeg
>> har fat i dem her:(de 2 sidste)
>>
>>    ffdatoArray(rspladser("modul")-1) = rspladser("foedt-foer")
>>    fedatoArray(rspladser("modul")-1) = rspladser("foedt-efter")
>
> Hvorfor egentlig? Er de ikke rimeligt statiske?

jo det er de som regel, dog ser der til tider lidt ændringer.
men det kan jo betyde noget, om de tilmelder dagen før planlagt
startdato eller langtid før - så derfor vil jeg prøve at lave noget andet


> Hvad indeholder de to felter nærmere bestemt?

de indeholder dato, men jeg skal nok have ændret formatet ! hvordan gør
jeg det nemmest ???

jeg har puslet med det.

koden:
// laver født før ------------ erik
var ffdatoArray = new Array ;
<%
Dim ffcounter
for ffcounter = 0 to 8
response.write "ffdatoArray[" + cStr(ffcounter)+"]=" +
cStr(ffdatoArray(ffcounter)) + ";" + vbCrLf
next
%>
// ------------------------ erik


giver dette
// laver født før ------------ erik
var ffdatoArray = new Array ;
ffdatoArray[0]=18-06-2010;
ffdatoArray[1]=18-06-2010;
ffdatoArray[2]=18-06-2009;
ffdatoArray[3]=18-06-2008;
ffdatoArray[4]=18-06-2007;
ffdatoArray[5]=18-06-2006;
ffdatoArray[6]=18-06-2005;
ffdatoArray[7]=18-06-2004;
ffdatoArray[8]=18-06-2003;

// ------------------------ erik




jeg har fået fat i det der kommer indmelder,

// sammensætter hund født
// ændret 2010-08-22
   var hundfoedt = document.forms[0].y1.value + ", " +
document.forms[0].m1.value + ", " + document.forms[0].d1.value;
//omsætter til datoformat
   var datehundfoedt = new Date(hundfoedt);


og hvis jeg udskriver det

document.write( "dato sammensat = " + datehundfoedt +
"<br><br><br><br><br>" );

bliver det til dette

dato sammensat = Sun Aug 22 2010 00:00:00 GMT+0200



så det første er vel konvertering af dato fra født før.
hvordan gør jeg det nemmest???

mvh Erik




Jens Peter Karlsen (23-08-2010)
Kommentar
Fra : Jens Peter Karlsen


Dato : 23-08-10 19:31

Se inline.

On Sun, 22 Aug 2010 21:17:58 +0200, Is <erikisager@mail.dk> wrote:

>de indeholder dato, men jeg skal nok have ændret formatet ! hvordan gør
>jeg det nemmest ???

I databasen ændrer du typen fra dateTime til string.
Hvis du samtidig vil fjerne tidsstemplet så kun selve datoen står
tilbage er det en del mere kompliceret.

>så det første er vel konvertering af dato fra født før.
>hvordan gør jeg det nemmest???

Bare undgå konverteringen til datoformat, så har du det som ren tekst.

Regards Jens Peter Karlsen.

Is (23-08-2010)
Kommentar
Fra : Is


Dato : 23-08-10 21:01

Den 23-08-2010 20:30, Jens Peter Karlsen skrev:
> Se inline.
>
> On Sun, 22 Aug 2010 21:17:58 +0200, Is<erikisager@mail.dk> wrote:
>
>> de indeholder dato, men jeg skal nok have ændret formatet ! hvordan gør
>> jeg det nemmest ???
>
> I databasen ændrer du typen fra dateTime til string.
> Hvis du samtidig vil fjerne tidsstemplet så kun selve datoen står
> tilbage er det en del mere kompliceret.

jeg vil ikke gøre det besværligt ??? i hvert fald ikke mere end
nødvendigt så jeg forstår ikke helt hvad du mener.



>
>> så det første er vel konvertering af dato fra født før.
>> hvordan gør jeg det nemmest???
>
> Bare undgå konverteringen til datoformat, så har du det som ren tekst.


kan jeg så lave en

if "01-08-20102 > "01-06-2010" (større end)

?????

mvh Erik

Jens Peter Karlsen (24-08-2010)
Kommentar
Fra : Jens Peter Karlsen


Dato : 24-08-10 17:42

Nej en streng kan ikke sammenlignes på den måde. (ikke pålideligt
ihvertfald).
Til sammenligningen kan du bruge substring til at uddrage dag/måned/år
Derefter forvandler du til tal som du så kan sammenligne.

Regards Jens Peter Karlsen.

On Mon, 23 Aug 2010 22:01:00 +0200, Is <erikisager@mail.dk> wrote:

>if "01-08-20102 > "01-06-2010" (større end)
>

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste