Avatar billede -thomas- Nybegynder
25. juli 2003 - 08:44 Der er 34 kommentarer og
1 løsning

script til datoer

Jeg har en form med et dato-felt, men mangler et javascript, der gør følgende:

Return true hvis:
- Hvis indtastet dato er i nuværende måned eller senere.
- Hvis dags dato er senest den 5. i måneden og datofeltet er i sidste måned (men aldrig før).

Return false og fejlmeddelelse hvis:
- Hvis ovenstående ikke opfyldes.
- Hvis indtastet dato er efter dags dato.


Det skal bruges til en form for time-sagsregistrering, så man kun kan taste datoer fra sidste måned indtil den 5. i måneden og derefter kun for nuværende måned. Er det muligt at lave? Håber nogen kan hjælpe med dette...
Avatar billede grunken Nybegynder
25. juli 2003 - 15:29 #1
Hmm måske du kan forklare lidt bedre?

jeg syns du roder lidt rundt i hvad det egentligt skal kunne ;)
Avatar billede -thomas- Nybegynder
25. juli 2003 - 17:20 #2
Ja meget gerne, men det er lidt svært at forklare. Har selv prøvet at lave, men det gik ret skidt, da jeg er elendig til javascript...

Det skal bruges til at kunne tidsregistrere i et system. Man må gerne kunne tidsregistrere i den måned man er i, men aldrig forud. Man må også gerne kunne tidsregistrere for sidste måned, men kun indtil den 5. i denne måned og aldrig længere bagud en sidste måned.
Altså f.eks.
- 3. februar må du taste 1/1 - 3/2 ind i datofeltet.
- 7. februar må du taste 1/2 - 7/1 ind i datofeltet.
- 20. februar må du taste 1/2 - 20. februar ind i datofeltet.
- 1. juni må du taste 1/5 - 1/6 ind i datofeltet.

Ved godt det er en smule indviklet, men håber at nogen kan hjælpe med dette.

På forhånd tak.
Avatar billede atheist Nybegynder
26. juli 2003 - 01:45 #3
Understøtter din server ASP?
Avatar billede atheist Nybegynder
26. juli 2003 - 02:51 #4
Det blev lidt mere omfattende end det egentlig var meningen, men jeg skulle lige sikre mig at man kun kunne vælge en dato der eksisterede... (man kan altsp ikke registrere d. 30/2)


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="Generator" content="Stone's WebWriter 4 BETA 6">
<script type="text/javascript">

var maaneder = new Array(31,28,31,30,31,30,31,31,30,31,30,31)
var maanederne = new Array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December")

var dag = new Date()
var dato = dag.getDate()
var maaned = dag.getMonth()
var kode=" <select name='valgtmaaned' onchange='shoew()'>"
var antaldag =maaneder[maaned]
function initpage(){
for (var a=1;antaldag>=a;a++){
kode =kode+"<OPTION value="+a+">"+a
}
var kodemdr =" <select name='valgtdag' onchange='reg()'>"
kode = kode+"</option>"
valg.innerHTML = kode

for (var a=0;11>=a;a++){
kodemdr =kodemdr+"<OPTION value="+a+">"+maanederne[a]
}
kodemdr = kodemdr+"</option>"
valgmdr.innerHTML = kodemdr

}

function reg(){
var regdag    =    document.formen.valgtmaaned.value        <!-- Den dag der er registreret -->   
var regmonth    =    document.formen.valgtdag.value        <!-- Den måned der er registreret -->
var checked = "not"
alert(dato+", "+maaned)
if (dato>=regdag && regmonth==maaned){
checked = "ok" <!-- ikke røre denne linje -->
}
if (regmonth == maaned-1 && 5>dato){
checked = "ok" <!-- ikke røre denne linje -->
}
if (checked == "not"){   
alert("Beklager, den gik ikke")<!-- Denne sætning kører hvis der er noget galt -->
}
else {
alert("alt er ok")<!-- Denne sætning kører hvis alt er ok -->
}
function shoew(){
second.style.visibility="visible"
}
</script>



    <title>[Ingen titel]</title>
</head>
<body onload="initpage()">
<form name="formen">
<a name="valg" > </a>/<a id="second" style="visibility:hidden" name="valgmdr" > </a>
</form>
</body>
</html>

Du kan forhåbentlig selv se, hvad du skal skifte ud for at få det til at reagere som du vil ha det til...
Avatar billede atheist Nybegynder
26. juli 2003 - 03:03 #5
har lige rettet lidt i den,,, Det må i undskylde, men jeg er lidt træt... Har været på arbejde siden kl. 6:00 (om morgenen) og nu er kl. 03:00 hvilket vil sige at jeg det sidste døgn har fået 2 timers søvn (stod op kl. 5)
Her er lige den rettede version:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="Generator" content="Stone's WebWriter 4 BETA 6">
<script type="text/javascript">

var maaneder = new Array(31,28,31,30,31,30,31,31,30,31,30,31)
var maanederne = new Array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December")

var dag = new Date()
var dato = dag.getDate()
var maaned = dag.getMonth()
var kode=" <select name='valgtmaaned' onchange='reg()'>"
var antaldag =maaneder[maaned]
function mdr(){
    for (var a=1;antaldag>=a;a++){
        kode =kode+"<OPTION value="+a+">"+a
    }   
    kode = kode+"</option>"
    valg.innerHTML = kode
}
function initpage(){
    var kodemdr =" <select name='valgtdag' onchange='shoew()'>"

    for (var a=0;11>=a;a++){
        kodemdr =kodemdr+"<OPTION value="+a+">"+maanederne[a]
    }
    kodemdr = kodemdr+"</option>"
    valgmdr.innerHTML = kodemdr
}

function reg(){
    var regdag    =    document.formen.valgtmaaned.value        <!-- Den dag der er registreret -->   
    var regmonth    =    document.formen.valgtdag.value        <!-- Den måned der er registreret -->
    var checked = "not"

    if (dato>=regdag && regmonth==maaned){
        checked = "ok" <!-- ikke røre denne linje -->
    }
    if (regmonth == maaned-1 && 5>dato){
        checked = "ok" <!-- ikke røre denne linje -->
    }
    if (checked == "not"){   
        alert("Beklager, den gik ikke")<!-- Denne sætning kører hvis der er noget galt -->
    }
    else {
        alert("alt er ok")<!-- Denne sætning kører hvis alt er ok -->
    }
}
function shoew(){
    valg.style.visibility="visible"
    mdr()

}
</script>



    <title>[Ingen titel]</title>
</head>
<body onload="initpage()">
<form name="formen">
<a id="valg" style="visibility:hidden"> </a>/<a id="second"  name="valgmdr" > </a>
</form>
</body>
</html>

Beklager endnu en gang.
Avatar billede -thomas- Nybegynder
26. juli 2003 - 10:05 #6
Det ser jo ud til at virke helt fint! Tusind tak for hjælpen!!!

Egentlig behøves der ikke være validering af datoen, da den altid bliver angivet korrekt i formatet dd-mm-yyyy. Er det noget du gider at lave, så ville jeg blive lykkelig! :-) Men i hvert fald mange tak for hjælpen.
Avatar billede atheist Nybegynder
26. juli 2003 - 12:18 #7
validering af datoen?
Avatar billede atheist Nybegynder
26. juli 2003 - 12:24 #8
Hey, havde lavet en bøf, sådan at hvis man først valgte f.eks. december, og så ombestemte sig til februar, gav det 31 dage i februar... Har lige rettet det.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="Generator" content="Stone's WebWriter 4 BETA 6">
<script type="text/javascript">

var maaneder = new Array(31,28,31,30,31,30,31,31,30,31,30,31)
var maanederne = new Array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December")

var dag = new Date()
var dato = dag.getDate()
var maaned = dag.getMonth()
var kode
var antaldag =maaneder[maaned]
var regmonth
function mdr(){
kode=" <select name='valgtmaaned' onchange='reg()'>"
    for (var a=1;maaneder[regmonth]>=a;a++){
        kode =kode+"<OPTION value="+a+">"+a
    }   
    kode = kode+"</option>"
    valg.innerHTML = kode
}
function initpage(){
    var kodemdr =" <select name='valgtdag' onchange='shoew()'>"

    for (var a=0;11>=a;a++){
        kodemdr =kodemdr+"<OPTION value="+a+">"+maanederne[a]
    }
    kodemdr = kodemdr+"</option>"
    valgmdr.innerHTML = kodemdr
}

function reg(){
    var regdag    =    document.formen.valgtmaaned.value        <!-- Den dag der er registreret -->   
   
    var checked = "not"

    if (dato>=regdag && regmonth==maaned){
        checked = "ok" <!-- ikke røre denne linje -->
    }
    if (regmonth == maaned-1 && 5>dato){
        checked = "ok" <!-- ikke røre denne linje -->
    }
    if (checked == "not"){   
        alert("Beklager, den gik ikke")<!-- Denne sætning kører hvis der er noget galt -->
    }
    else {
        alert("alt er ok")<!-- Denne sætning kører hvis alt er ok -->
    }
}
function shoew(){
    valg.style.visibility="visible"
regmonth = document.formen.valgtdag.value  <!-- Den måned der er registreret -->
    mdr()

}
</script>



    <title>[Ingen titel]</title>
</head>
<body onload="initpage()">
<form name="formen">
<a id="valg" style="visibility:hidden"> </a>/<a id="second"  name="valgmdr" > </a>
</form>
</body>
</html>
Avatar billede atheist Nybegynder
26. juli 2003 - 14:10 #9
Hvordan mener du at datoen skal valideres?
Avatar billede -thomas- Nybegynder
26. juli 2003 - 15:37 #10
At den ikke behøver at tjekke om dato-formatet er korrekt, så det er vel ikke nødvendigt med det array med antallet af dage i månederne eller hvad? Jeg er ikek så god til javascript...
Avatar billede atheist Nybegynder
26. juli 2003 - 17:56 #11
arrayet med antallet af dage er der bare for at sikre at man ikke kan vælge d. 30 hvis man også vælger februar...
Avatar billede -thomas- Nybegynder
27. juli 2003 - 11:19 #12
Ok, jeg mente bare at datoen blev angivet i et tekstfelt i formatet dd-mm-yyyy i stedet for i to dropdowns. Men jeg prøver lige om jeg selv kan ændre det...
Avatar billede atheist Nybegynder
27. juli 2003 - 13:50 #13
Vent lige 2 sek...
Det skulle ikke være så svært, problemet bliver som du selv siger, at få brugeren til at taste det i det rigtige format...
Avatar billede atheist Nybegynder
27. juli 2003 - 14:50 #14
Sådan! Nu er det lavet sådan at brugeren kan indtaste det i det format han vil
(D/M, DD/M, D/MM DD/MM), dvs. der skal ikke skrives 0 foran tal mindre end 10...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head><script type="text/javascript">

function check(){
    var idag = new Date()
    var dag = idag.getDate()
    var maaned = idag.getMonth()
    var regdato = document.valger.datoen.value
    lengde =regdato.length
   
    if (isNaN(regdato.substring(0,2))){
            regdato = "0"+regdato
    }

    if (isNaN(regdato.substring(3,lengde))){
        var før = regdato.substring(0,4)
        var efter = regdato.substring(5,lengde)
        regdato =før+"0"+efter
    }

    var tal =regdato.substring(0,2)+regdato.substring(3,5)

    if (    regdato.substring(2,3) !="/" || isNaN(tal)){
        alert("Du har indtastet et forkert format")
        document.valger.datoen.value = "DD/MM"
        return false
    }
    var regdag =(regdato.substring(0,2))
    var regmaaned = regdato.substring(3,5)
    regdag =parseInt(regdato.substring(0,2))-1
    regmaaned = parseInt(regdato.substring(3,5))-1
   
    var chkmdr
    var chksmdr
    if(maaned == regmaaned && dag>=regdag){
        chkmdr ="ok"
    }
    if(5>dag && maaned-1==regmaaned){
        chkmdr ="ok"
    }
    if (chkmdr = "ok"){
        alert("Alt er A-OK!")
    }
    else{
        alert("Den indtastede dato er ugyldig")
        document.valger.datoen.value = "DD/MM"
    }

}
</script>



    <title>[Ingen titel]</title>
<meta name="Generator" content="Stone's WebWriter 4 BETA 6">
</head>
<body>
<form name="valger"><input type="text" value="DD:MM" name="datoen"><input type="button" value="Registrér" onclick="check()"></form>


</body>
</html>
Avatar billede atheist Nybegynder
27. juli 2003 - 15:08 #15
Glemte lige, den skal også tjekke om der overhovedet ER så mange dage i måneden som brugeren har valgt...
tilføj flg. stump INDEN linjen "var chkmdr":

var maaneder = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31)
    if (regdag>maaneder[regmaaned]){
        alert("Så mange dage er der ikke i den valgte måned")
        document.valger.datoen.value = "DD/MM"
        return false
    }
Avatar billede -thomas- Nybegynder
25. august 2003 - 13:31 #16
atheist> Hej igen, undskyld jeg først vender tilbage nu, men har først fået brugt scriptet nu. Det sidste du lavede ser ikke helt ud til at virke. Hvis du gider at hjælpe igen, opretter jeg et nyt spørgsmål med 100 points.

Datoen er ALTID angivet i "DD-MM-YYYY" og skal ikke valideres, da den er valgt af en "dato-vælger" til et readonly felt og vil derfor altid være korrekt.

Ved submit skal der tjekkes som beskrevet i spørgsmålet. Kan dette lade sig gøre?

Dvs. der er kun to mulige udfald: "Der kan ikke registreres på denne dato." (og return false) eller at formen bliver submittet.

På forhånd tak.
Avatar billede atheist Nybegynder
25. august 2003 - 15:51 #17
med et readonly felt, mener du da en de-aktiveret tekst box eller en skjult inbox eller noget lignende?
Avatar billede -thomas- Nybegynder
25. august 2003 - 16:31 #18
Nej, jeg mener et <input type="text" readonly value="25-08-2003"> og ved siden af denne en knap, som åbner et script, hvori du kan vælge datoer (som altid er formateret korrekt).
Avatar billede atheist Nybegynder
25. august 2003 - 16:35 #19
ok, kan du så ikke bruge nummer to script jeg postede, hvor den laver to <option>-bokse dynamisk alt efter tiden? Der er det ikke muligt at gøre noget galt, lige meget hvor ihærdigt man forsøger...
Avatar billede -thomas- Nybegynder
25. august 2003 - 16:38 #20
Nej, jeg skal fortsat bruge den "dato-vælger" jeg bruger nu, men skal udover det, bruge et script der gør, som det du har lavet. Det skal bare virke til dd-mm-yyyy og det behøver ikke validere datoer, da "dato-vælgeren" har klaret det.
Avatar billede atheist Nybegynder
25. august 2003 - 18:56 #21
sørger datovælgeren selv for at der ikke er 29 dage i februar osv?
Avatar billede -thomas- Nybegynder
25. august 2003 - 18:59 #22
Ja, datoen kan ikke være forkert. Man vælger det i en kalender der popper op ved siden af.
Avatar billede atheist Nybegynder
25. august 2003 - 19:01 #23
ok, jeg tilføjer lige at hvis aktuelle måned er januar, så må den skrevne måned være december (hvis aktuelle dato ikke er 5.)
Avatar billede -thomas- Nybegynder
25. august 2003 - 19:03 #24
Ja, hvis den aktuelle dato ikke er > 5. januar.
Avatar billede atheist Nybegynder
25. august 2003 - 19:04 #25
jepper, jeg vil i øvrigt anbefale dig at lave det i ASP, ellers kan man bare gå ind og ændre sin computers dato, hvorefter man kan vælge den dato er passer en....
Avatar billede -thomas- Nybegynder
25. august 2003 - 19:09 #26
Det har du jo faktisk ret i - det duer ikke. Jeg laver det selv i ASP. Du får dine points alligevel :-)  Tak for hjælpen anyway.
http://www.eksperten.dk/spm/392394
Avatar billede atheist Nybegynder
25. august 2003 - 19:10 #27
det er begrænset hvor meget du kan lave i ASP, det er jo statisk, bare nøjes med at indsætte aktuelle dato ind med asp.... Så tager den datoen fra serveren...
Avatar billede -thomas- Nybegynder
25. august 2003 - 19:12 #28
Jeg kan jo tjekke ved submit om betinglserne er opfyldt, og hvis de ikke er bliver man smidt tilbage til formen med de oplysninger man havde indtastet og en besked om, at man ikke kan registrere på den dato.
Avatar billede -thomas- Nybegynder
25. august 2003 - 19:14 #29
Aah, så du mener jeg skal lægge dags dato i et felt som javasriptet henter? Evt. i et hidden field?
Avatar billede atheist Nybegynder
25. august 2003 - 19:15 #30
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head><script type="text/javascript">

function check(){
    var skdato = document.valger.datoen.value
    var dato= new Date()
    var chk = "forkert"
    var idag = <% Day %>
    var iaar = <% year %>
    var imdr = <% Month %>
    var sdag = parseInt(skdato.substring(0,2))
    var okmdr = imdr-1
    if (okmdr ==0 ){
        okmdr = 12
    }
    var smdr = parseInt("10", skdato.substring(3,5))
    if (smdr == imdr && idag>=sdag){
        return true
    }
    if (smdr ==okmdr && 5>=idag){
        return true
    }
    return false
}
</script>



    <title>[Ingen titel]</title>
<meta name="Generator" content="Stone's WebWriter 4 BETA 6">
</head>
<body>
<form name="valger"><input type="text" value="DD:MM" name="datoen"><input type="button" value="Registrér" onclick="alert(check())"></form>


</body>
</html>
Avatar billede atheist Nybegynder
25. august 2003 - 19:16 #31
browseren vil læse <% month %> <% day %> <% yeat %> som 8 25 og 2003 (idag er det 25/8/2003), så slipper du også for at parseInt og lægge en til...
Avatar billede -thomas- Nybegynder
25. august 2003 - 19:19 #32
Altså sådan:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head><script type="text/javascript">

function check(){
    var skdato = document.valger.datoen.value
    var dato= new Date()
    var chk = "forkert"
    var idag = <% =Day(Now) %>
    var iaar = <% =year(Now) %>
    var imdr = <% =Month(Now) %>
    var sdag = parseInt(skdato.substring(0,2))
    var okmdr = imdr-1
    if (okmdr ==0 ){
        okmdr = 12
    }
    var smdr = parseInt("10", skdato.substring(3,5))
    if (smdr == imdr && idag>=sdag){
        return true
    }
    if (smdr ==okmdr && 5>=idag){
        return true
    }
    return false
}
</script>



    <title>[Ingen titel]</title>
<meta name="Generator" content="Stone's WebWriter 4 BETA 6">
</head>
<body>
<form name="valger"><input type="text" value="DD:MM" name="datoen"><input type="button" value="Registrér" onclick="alert(check())"></form>


</body>
</html>
Avatar billede atheist Nybegynder
25. august 2003 - 19:20 #33
ja, min fejl, er ikke lige så kewl til VBscript.
Avatar billede -thomas- Nybegynder
25. august 2003 - 19:22 #34
Det virker perfekt!! Tak for det! Skulle selvfølgelig have skrevet at det var i ASP...
Avatar billede atheist Nybegynder
25. august 2003 - 19:26 #35
Takker for point. *GG*

"Never insult seven men, when all you got is a six-shooter"
//Sherman Potter - M*A*S*H 4077
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester