• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datumsauswahl in Dropdownmenü

-Ch-

Neues Mitglied
Wie bekomme ich ein dynamisches Dropdownmenü hin, indem ich ein Datum in der Zukunft (mindestens ein Tag nach dem aktuellen datum) auswählen kann? Das Jahr soll jeweils das selbe bleiben.

Die Form ist mir egal also ob 5.Januar.2011 oder 05.01.2011 ist mir gleich. Ich muss nachher das vom User ausgewählte Datum nur noch in einen Timestamp konvertieren.

Hab es zuerst nicht dynamisch gelöst. Aber da hab ich das Problem, dass ein User ein Datum auch in der Vergangenheit auswählen kann, ist halt unschön, auch wenn man das nach absenden des Formulars einfach verhindern könnte. Dynamisch wäre besser.
 
Werbung:
Eine php Lösung wäre folgendes:

Code:
<?php
//Heute
$timestamp = time();


//20 Tage in die Zukunft...
for($i=0;$i<20;$i++){
    $timestamp = $timestamp+86400;


    $datum = date("d.m.Y",$timestamp);


    echo $datum."<br />";
}
?>
 
Werbung:
Es ist nicht jeder Tag 86400 Sekunden lang. Das gibt zu bestimmten Zeitpunkten so Rechenfehler.

Die einfachste Lösung wäre wohl eines der hier angegebenen relativen Formate ("+1 day"):

- PHP: Supported Date and Time Formats - Manual

Aber irgendwie wäre ich insgesamt für eine präzisere Fragestellung. Wenn nur eine Spanne von wenigen Tagen in der Zukunft ausgewählt werden können muss, würde so eine Schleifenlösung jedenfalls prinzipiell auch reichen, ja.
 
Werbung:
In HTML5 gibt es für Input-Elemente als Type-Wert bereits "date".
Das stimmt zwar, doch leider ist der Markt noch mit zu vielen Browsern übersäht die das Input-Element mit dem Attribut date nicht kennen und man im Moment um eine Fallbacklösung wie sie mermshaus angesprochen hat wohl nicht umhin kommt.

Beispiel mit Javascript:

AB 2 Tage bis 330 Tage in Zukunft:

HTML:
<!DOCTYPE html>
<html lang="en">    
    <head>        
        <title>Test
        </title>        
        <meta charset="utf-8">        
        <meta name="description" content="">                              

<script>
function selectVON($von) {
    document.write("<select name='VON' onChange='setBIS()'>")
    if($von < 1 | $von > 330 | $von == '' ){ $von = 2; }
    for (var i=1; i<=330;i++){
        if (i==$von) document.write('<option selected ');  else document.write('<option ');
        document.write('value='+i+'>'+GetDatum(i)+'</option>')
    }
    document.write("</select>")
}
function setBIS(){
    with (document.GO){
        VonOffset = VON.selectedIndex
        Bis = Math.max(Math.min( BIS.selectedIndex + VonOffset-Von ,BIS.length-1),0);
        BIS.selectedIndex = Bis;
        Von=VonOffset
    }    
}
function selectBIS($bis){
    document.write("<select name='BIS'>")
    if($bis < 1 | $bis > 340 | $bis == '' ){ $bis = 36; }
    for (var i=4; i<=340;i++){
        if (i==$bis) document.write('<option selected ');  else document.write('<option ');
        document.write('value='+i+'>'+GetDatum(i)+'</option>')
    }
    document.write('</select>')
}
function GetDatum(offset){
    Days = new Array("SO","Mo","Di","Mi","Do","Fr","SA","??" )
    var time = new Date()
    time.setTime( time.getTime()+offset*86400000)
    tag = time.getDate()
    if (tag < 10){ tag = '&nbsp;&nbsp;'+tag }
    monat = (1+time.getMonth())
    if (monat < 10){ monat = '0'+monat }
    return tag+'.'+monat+'.'+(2000+(time.getYear()%100))+' '+Days[time.getDay()]
} 
</script>       
        <body>                           
            <h2>Zeitraum</h2>                    
            <p>vom
                </br>                        
<script type="text/javascript">selectVON('2')</script>
                </br>                                         Bis
                </br>                        
<script type="text/javascript">selectBIS('60')</script>
                </br>                            
<script>Von=document.GO.VON.selectedIndex</script>     
        </body>
</html>
 
Bin mir nicht sicher, ob die JS-Funktion dort die Zeitumstellung korrekt berücksichtigt.

Das Problem ist generell einfach: Wenn du um 23.01 Uhr an dem Tag vor dem Tag, an dem die Uhren vorgestellt werden (hat nur 23 Stunden), 24 Stunden hinzufügst, bist du nicht bei 23.01 Uhr des nächsten Tags, sondern bei 0.01 Uhr des übernächsten. Ähnlich ist's auch bei der Umstellung von Sommer- auf Winterzeit.

Das Problem tritt immer dann auf, wenn sich die entsprechenden Tage innerhalb des zu berechnenden Intervalls befinden. Je nach Intervallgröße läppert sich das.
 
Werbung:
Die Funktion berücksichtigt die Zeitumstellung nicht.
Das wirkt sich genau auf 2 Tage im Jahr aus, ist aber vernachlässigbar da hier Daten in die Zukunft angezeigt werden. Mindestens 2 Tage.
Da das Systemdatum ausgelesen wird, hat es bei Zeitumstellung in der Zeit von 23.00(plus 1 Sekunde) - 24.00 Uhr Einfluss auf den 2 Tage in der Zukunft liegenden Tag. Das kann aber vernachlässigt werden. Wundern werden sich die Leute da nicht, wenn um 23.01 Uhr statt 2 Tage schon 3 Tage in die Zukunft angezeigt werden. Ist halt Pech wie man so schön sagt. Bei Umstellung zur Winterzeit haben sie dafür 1 Stunde dann mehr Zeit an genau einem Tag im Jahr.

Wer möchte kann das aber einbauen, ist jedem freigestellt.

Der 29.Februar 2012 wird aber angezeigt als Mittwoch.
Datumsauswahl.jpgBeispiel
 
Du kannst auch einfach mit setDate() arbeiten

Code:
    function GetDatum(offset){
        var time = new Date();
        time.setDate(time.getDate() + offset);
        return time.toLocaleString();
    }
 
Zurück
Oben