25. juli 2003 - 08:44Der 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...
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
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.
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
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>
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()'>"
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()
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.
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()'>"
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()
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...
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...
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" }
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 }
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.
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).
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...
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.
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....
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
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...
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.
<!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>
<!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>
"Never insult seven men, when all you got is a six-shooter" //Sherman Potter - M*A*S*H 4077
Synes godt om
Ny brugerNybegynder
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.