Avatar billede Morten Nybegynder
01. juni 2007 - 01:39 Der er 20 kommentarer og
1 løsning

dato funktion

Hej

Jeg har fundet understående script her på eksperten og vil gerne have det udvidet til kun at vise de måneder som er tilbage af i år - sådan at man ikke kan vælge en måned der er passeret, men jeg aner Dyt og Nul om Javascript så håber at nogle kan vise mig hvad jeg skal gøre:

<script type="text/JavaScript">
function setSel(f) {
    var leap, num, dayNum = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if (f.year.value>-1 && f.month.value>-1) {
        if (f.month.value==1) {
            leap = (f.month.value==1 && new Date(f.year.value, f.month.value, 29).getMonth()==f.month.value)
            num = (leap)? 29 : 28;
        }
        else num = dayNum[f.month.value];
        f.day.disabled = false;
        f.day.options.length = 1;
        for (i=1; i<num+1; i++) {
            f.day.options[i] = new Option(i,i);
        }
    }
    else f.day.disabled = true;
}
</script>

<select name="year" onchange="setSel(this.form)">
    <option value="-1">År</option>
        <?php
        $date_now = getdate();
        $year_now = date("Y", $date_now[0]);

        $i=$year_now;
            while($i < $year_now+7){ ?>
                <option value="<? echo $i; ?>"><? echo $i; ?></option>
            <? $i++;
            } ?>
</select>
<select name="month" onchange="setSel(this.form)" >
    <option value="-1">Mån</option>
    <option value="0">Jan</option>
    <option value="1">Feb</option>
    <option value="2">Mar</option>
    <option value="3">Apr</option>
    <option value="4">Maj</option>
    <option value="5">Jun</option>
    <option value="6">Jul</option>
    <option value="7">Aug</option>
    <option value="8">Sep</option>
    <option value="9">Okt</option>
    <option value="10">Nov</option>
    <option value="11">Dec</option>
</select>
<select name="day" disabled>
    <option value="-1">Dag</option>
</select>
Avatar billede Morten Nybegynder
01. juni 2007 - 01:40 #1
hvis man vælger næste år (2008) skal alle måneder selvfølelig være tilgængelige...
Avatar billede roenving Novice
01. juni 2007 - 02:55 #2
F.eks.

<script type="text/JavaScript">
function setSel(sel) {
    if(sel.name == "year")showActMonths();
    f = sel.form;
    var leap, num, dayNum = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if (f.year.value>-1 && f.month.value>-1) {
        if (f.month.value==1) {
            leap = (f.month.value==1 && new Date(f.year.value, f.month.value, 29).getMonth()==f.month.value)
            num = (leap)? 29 : 28;
        }
        else num = dayNum[f.month.value];
        f.day.disabled = false;
        f.day.options.length = 1;
        for (i=1,im=num+1; im>i; i++) {
            f.day.options[i] = new Option(i,i);
        }
    }
    else f.day.disabled = true;
}
var months = ["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"]
function showActMonths(){
  var f = document.forms[0], today=new Date(), monthSel = f.month;
  monthSel.length = 1;
  var showMonths = f.year.value > today.getFullYear() ? 0 : today.getMonth();
  for(i=showMonths,im=12;im>i;i++){
    monthSel.options[monthSel.length] = new Option(months[i],monthSel.length+showMonths-1);
  }
}
window.onload = function(){showActMonths();};
</script>

<form>
<select name="year" onchange="setSel(this)">
    <option value="-1">År</option>
    <option value="2007">2007</option>
    <option value="2008">2008</option>
    <option value="2009">2009</option>
    <option value="2010">2010</option>
    <option value="2011">2011</option>
    <option value="2012">2012</option>
</select>
<select name="month" onchange="setSel(this)" >
    <option value="-1">Mån</option>
</select>
<select name="day" disabled>
    <option value="-1">Dag</option>
</select>
</form>
Avatar billede Morten Nybegynder
19. juni 2007 - 15:47 #3
jepper tak det virkede - kan jeg spørge om en ting mere...

De tre felter skal sættes sammen og lægges i et fjerde felt som er hidden - hvordan gør jeg det?
Avatar billede Morten Nybegynder
19. juni 2007 - 15:48 #4
Og smid venligst et svar så jeg kan tildele point.
Avatar billede roenving Novice
19. juni 2007 - 15:57 #5
...

<select name="day" disabled onchange="this.form.actDate.value=this.value+this.form.month.value+this.form.year.value;">
    <option value="-1">Dag</option>
</select>
<input type="hidden" name="actDate">
</form>

-- her har jeg bare sat den til ddmmåååå, det kan du selvfølgelig bare lave om !-)

Velbekomme '-)
Avatar billede roenving Novice
19. juni 2007 - 15:59 #6
Hrm, der skal vist lige sættes tegn ind, s det kan blive et fornuftigt format, for en-cifrede dage og måneder er jo mulige med den måde værdier sættes, så:

<select name="day" disabled onchange="this.form.actDate.value=this.value+"-"+this.form.month.value+"-"+this.form.year.value;">

-- så formatet bliver d-m-åååå
Avatar billede roenving Novice
19. juni 2007 - 16:41 #7
-- og tak for point ;~}
Avatar billede Morten Nybegynder
21. juni 2007 - 15:31 #8
Den siger der er en syntaksfejl??
<select name="day" disabled onchange="this.form.MyArrival.value=this.value+"-"+this.form.month.value+"-"+this.form.year.value;">

Kan du se hvad der er galt?
Avatar billede Morten Nybegynder
21. juni 2007 - 15:32 #9
du får lige det skjulte felt:

<input type="hidden" name="MyArrival" size="8" id="SBlock:MyArrival">
Avatar billede Morten Nybegynder
21. juni 2007 - 15:36 #10
<select name="day" disabled onchange="this.form.MyArrival.value=this.value+'-'+this.form.month.value+'-'+this.form.year.value;">
så virker den dobbelt gnyffer ændret til enkelt gnyffer i koden..

Men jeg har et lille problem for den sætter måneden til det valgte -1 altså hvis jeg vælger juli så overføre den juni (vælger 07 overføre 06) kan du hjælpe med den?
Avatar billede roenving Novice
22. juni 2007 - 01:55 #11
Ja, javascripts måde at benytte måneder som index i et array, kan sagtens være forvirrende, men så adderer vi bare 1:

<select name="day" disabled onchange="this.form.MyArrival.value=this.value+'-'+(this.form.month.value+1)+'-'+this.form.year.value;">

-- og det er helt korrekt at ændre til gnyffer, den overså jeg desværre !-)

PS. Det kan også gøres ved at ændre value-tingen på month-selecten, men det er et valg ...
Avatar billede Morten Nybegynder
25. juni 2007 - 11:17 #12
Hey roenving

Når jeg indsætter ovenstående bliver resultatet: 1-71-2007 - det burde blive 1-8-2007

Jeg kan ikke lige finde ud af at ændre value-tingen på month-selecten, eller forstår ikke lige hvordan det skal gøres
Avatar billede roenving Novice
26. juni 2007 - 00:24 #13
Hrm, tekst-tingen og java script:

<select name="day" disabled onchange="this.form.MyArrival.value=this.value+'-'+(+this.form.month.value+1)+'-'+this.form.year.value;">

-- et lille plus (der er en unær operator, der konverterer til tal !-)
Avatar billede Morten Nybegynder
26. juni 2007 - 00:35 #14
Det prøver jeg lige
Avatar billede Morten Nybegynder
26. juni 2007 - 00:45 #15
Jepper - tusind tak for din hjælp!!!
Avatar billede Morten Nybegynder
26. juni 2007 - 00:46 #16
Ahhhhhh jeg behøver lige en lille ting mere.. det script jeg sender til vil have formatet ##-##-#### hvordan klare jeg den? Hvis du skal have ekstra point så siger du bare til..1!!!
Avatar billede roenving Novice
26. juni 2007 - 01:14 #17
<script type="text/JavaScript">
function setSel(sel) {
    if(sel.name == "year")showActMonths();
    f = sel.form;
    var leap, num, dayNum = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if (f.year.value>-1 && f.month.value>-1) {
        if (f.month.value==1) {
            leap = (f.month.value==1 && new Date(f.year.value, f.month.value, 29).getMonth()==f.month.value)
            num = (leap)? 29 : 28;
        }
        else num = dayNum[f.month.value];
        f.day.disabled = false;
        f.day.options.length = 1;
        for (i=1,im=num+1; im>i; i++) {
            f.day.options[i] = new Option(i,i);
        }
    }
    else f.day.disabled = true;
}
var months = ["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"]
function showActMonths(){
  var f = document.forms[0], today=new Date(), monthSel = f.month;
  monthSel.length = 1;
  var showMonths = f.year.value > today.getFullYear() ? 0 : today.getMonth();
  for(i=showMonths,im=12;im>i;i++){
    monthSel.options[monthSel.length] = new Option(months[i],monthSel.length+showMonths-1);
  }
}
function twoDigits(num){
  return num < 10 ? "0" + num : "" + num;
}
window.onload = function(){showActMonths();};
</script>

<form>
<select name="year" onchange="setSel(this)">
    <option value="-1">År</option>
    <option value="2007">2007</option>
    <option value="2008">2008</option>
    <option value="2009">2009</option>
    <option value="2010">2010</option>
    <option value="2011">2011</option>
    <option value="2012">2012</option>
</select>
<select name="month" onchange="setSel(this)" >
    <option value="-1">Mån</option>
</select>
<select name="day" disabled onchange="this.form.MyArrival.value=twoDigits(this.value)+'-'+twoDigits(+this.form.month.value+1)+'-'+this.form.year.value;">
    <option value="-1">Dag</option>
</select>
</form>

-- tilføjet funktionen til at returnere to cifre hver gang !-)
Avatar billede Morten Nybegynder
26. juni 2007 - 13:06 #18
Tak for hjælpen - det virker perfekt
Avatar billede Morten Nybegynder
29. juni 2007 - 23:04 #19
og så bare et spørgsmål mere LOOOOL - kan du lave så dagene fungere ligesom månederne altså hvis man vælger den måned vi er i nu så får man kun de dage som er tilbage (inkl. dags dato) ?

Og som sagt jeg smider gerne flere point efter dig... synes sq du fortjener mindst 100 mere...
Avatar billede roenving Novice
30. juni 2007 - 18:04 #20
Ikke gennemtestet, men så ideen kan ses (vend tilbage, hvis der er fejl, så vi kan rette dem !-)

<script type="text/JavaScript">
var dayNum = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
function setSel(sel) {
    if(sel.name == "year")showActMonths();
    f = sel.form;
    var leap, num;
    if (f.year.value>-1 && f.month.value>-1) {
        if (f.month.value==1) {
            leap = (f.month.value==1 && new Date(f.year.value, f.month.value, 29).getMonth()==f.month.value)
            num = (leap)? 29 : 28;
        }
        else num = dayNum[f.month.value];
        showActDays(f.month.value,num);
    }
    else f.day.disabled = true;
}
var months = ["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"]
function showActMonths(){
  var f = document.forms[0], today=new Date(), monthSel = f.month;
  monthSel.length = 1;
  var showMonths = f.year.value > today.getFullYear() ? 0 : today.getMonth();
  for(i=showMonths,im=12;im>i;i++){
    monthSel.options[monthSel.length] = new Option(months[i],monthSel.length+showMonths-1);
  }
}
function showActDays(m,md,d){
  var today = new Date();
  switch(showActDays.arguments.length){
    case 0:
      m = today.getMonth();
      md = dayNum[m];
      d = today.getDate();
      break;
    case 2:
      md = dayNum[m];
      d = today.getMonth() == m ? d = today.getDate() : 1;
      break;
    case 1:
      d = today.getMonth() == m ? d = today.getDate() : 1;
      break;
    default:
  }
  elm = document.forms[0].day;
  elm.disabled = false;
  elm.length = 1;
  for (i=d,im=md+1; im>i; i++) {
    elm.options[elm.options.length] = new Option(i,i);
  }
}
function twoDigits(num){
  return num < 10 ? "0" + num : "" + num;
}
window.onload = function(){showActMonths();};
</script>

<form>
<select name="year" onchange="setSel(this)">
    <option value="-1">År</option>
    <option value="2007">2007</option>
    <option value="2008">2008</option>
    <option value="2009">2009</option>
    <option value="2010">2010</option>
    <option value="2011">2011</option>
    <option value="2012">2012</option>
</select>
<select name="month" onchange="setSel(this)" >
    <option value="-1">Mån</option>
</select>
<select name="day" disabled onchange="this.form.MyArrival.value=twoDigits(this.value)+'-'+twoDigits(+this.form.month.value+1)+'-'+this.form.year.value;">
    <option value="-1">Dag</option>
</select><br>
Ankomst: <input name="MyArrival" readonly>
</form>

-- og man kan ikke uddele flere point end 200, så den er allerede fjong !-)
Avatar billede Morten Nybegynder
30. juni 2007 - 20:26 #21
Okay får ikke lige teste det næste styk tid, men tak ... og man kan jo altid oprette et nyt spørgsmål og give nogle point... lol - Go' weekend...
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