2016-06-27 5 views
3

Ich versuche, eine Dropdown-Liste zu erstellen, die automatisch Daten in Textfelder eingibt.Javascript - Variable vorherigen Arbeitstag

Die Option "LBD" gibt derzeit das gestrige Datum zurück, aber ich möchte, dass es das Datum des letzten Geschäftstages zurückgibt. Wenn heute Montag ist, würde es das Datum des Freitags zurückgeben, wenn heute Dienstag ist, würde es das Datum von Montag zurückgeben. Und so weiter und so fort.

Dies ist, was ich bisher habe:

Javascript:

<script> 
$(document).ready(function() { 
$("#datetype option").filter(function() { 
    return $(this).val() == $("#datepickstart").val(); 
    return $(this).val() == $("#datepickend").val(); 
}).attr('selected', true); 
    var d = new Date(); 
var yesterday = (d.getMonth() + 1) + "/" + (d.getDate() - 1) + "/" + d.getFullYear(); 
var today = (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getFullYear(); 
var fdm = (d.getMonth() + 1) + '/01/' + d.getFullYear(); 
var fdy = '01/01/' + new Date().getFullYear(); 
$("#datetype").on("change", function() { 
    var selectedVal = $(this).find("option:selected").attr("value"); 
    if (selectedVal == 'LBD') { 
     $("#datepickstart").val((yesterday)); 
     $("#datepickend").val((yesterday)); 
    } 
    if (selectedVal == 'MtD') { 
     $("#datepickstart").val(fdm); 
     $("#datepickend").val(today); 
    } 
    if (selectedVal == 'YtD') { 
     $("#datepickstart").val(fdy); 
     $("#datepickend").val(today); 
    } 
}); 
}) 
</script> 

html:

<select id="datetype" name="datetype"> 
<option value="">Please select...</option> 
<option value="LBD">LBD</option> 
<option value="MtD">MtD</option> 
<option value="YtD">YtD</option> 
</select> 

<input type="text" id="datepickstart" name="datepickstart" value=""> 
<input type="text" id="datepickend" name="datepickend" value=""> 
+1

Der Code ist einfach 'während {date.setDate (Date.getDate() - 1)} (isBusinessDay (Datum)!) ', der schwierige Teil ist das Schreiben der 'isBusinessDay'-Funktion. – zzzzBov

Antwort

1

Um Ihr erwartetes Ergebnis zu erzielen, berechnen Sie den Tag und reduzieren Sie die Tage, um den vorherigen Arbeitstag zu erhalten.

$(document).ready(function() { 
    $("#datetype option").filter(function() { 
    return $(this).val() == $("#datepickstart").val(); 
    return $(this).val() == $("#datepickend").val(); 
    }).attr('selected', true); 

    var d = new Date(); 
    var bd = d.getDay(); 
    if (bd < 2) { 
    if (bd == 0) { 
     bd = 2; 
    } else { 
     bd = 3; 
    } 
    } else { 
    bd = 1; 
    } 
    var today = (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getFullYear(); 
    var lbd = (d.getMonth() + 1) + "/" + (d.getDate() - bd) + "/" + d.getFullYear(); 
    var fdm = (d.getMonth() + 1) + '/01/' + d.getFullYear(); 

    var fdy = '01/01/' + new Date().getFullYear(); 

    $("#datetype").on("change", function() { 
    var selectedVal = $(this).find("option:selected").attr("value"); 
    if (selectedVal == 'LBD') { 
     $("#datepickstart").val(lbd); 
     $("#datepickend").val(today); 
    } 
    if (selectedVal == 'MtD') { 
     $("#datepickstart").val(fdm); 
     $("#datepickend").val(today); 
    } 
    if (selectedVal == 'YtD') { 
     $("#datepickstart").val(fdy); 
     $("#datepickend").val(today); 
    } 

    }); 
}); 

Codepen- http://codepen.io/nagasai/pen/wWgQYE

LBD Berechnungsteil

var bd = d.getDay();// get day from today's date which be between 0-6 (0 is Sunday and 6 is Saturday 
    if (bd < 2) { 
    if (bd == 0) { 
     bd = 2; 
    } else { 
     bd = 3; 
    } 
    } else { 
    bd = 1; 
    } 
//variable lbd will get the last business day by reducing the calculated lbd from today's date 
    var lbd = (d.getMonth() + 1) + "/" + (d.getDate() - bd) + "/" + d.getFullYear(); 
1

Sie JavaScript getDay() Methode verwenden, können Sie eine ganze Zahl zurückgeben der vertretende Tag der Woche:

Der von getDay() zurückgegebene Wert ist eine Ganzzahl, die dem Wochentag entspricht: 0 für Sonntag, 1 für Montag, 2 für Dienstag und so weiter.

See docs for getDay() on MDN

So könnten Sie eine Methode schreiben, die falsch zurückgibt, wenn getDay() 0 zurück (Sonntag) oder 6 (Samstag).

0
function isBusinessDay(theDate){ 
    theDay = theDate.getDay(); // Get day returns 0-6, respectively Sunday - Saturday 
    if(theDay == 0 || theDay == 6){ 
    return false; 
    } else { 
    return true; 
    } 
} 

Verwendung mit zzzzBov der while (!isBusinessDay(date)) { date.setDate(date.getDate() - 1) }

A prägnanter Weise, es zu schreiben:

function isBusinessDay(theDate){ 
    theDay = theDate.getDay(); // Get day returns 0-6, respectively Sunday - Saturday 
    if(theDay == 0 || theDay == 6) return false; 
    return true; 
} 
2

getDay() Funktion der Schlüssel für Ihr Problem. Ich habe @zzzzBov Snippet für Iterator verwendet. Unten ist meine Lösung

step1: 
    function isBusinessDay(date){ 
    var day = date.getDay(); 
    if(day == 0 || day == 6 ){ 
     return false; 
    } 
    return true; 
    } 


step2: 
    var date = new Date(); 
    while (!isBusinessDay(date)) { date.setDate(date.getDate() - 1) } 

    console.log(date);//date always between monday to friday 

Hoffe das löst Ihr Problem. Glückliche Codierung !!