2012-10-30 15 views
9

Gibt es eine Möglichkeit, alle Tage eines Monats oder eines Jahres zu haben? Ich suche danach, um bestimmte Tage in einem Datepicker zu deaktivieren, ich hätte eine Seite im Backoffice um diese Tage zu deaktivieren.Finden Sie alle Tage in einem Monat mit Date-Objekt?

So müsste ich alle Tage in einem Monat anzeigen, und fügen Sie einen "aktivieren oder deaktivieren" -Button unter jedem Tag. Gibt es eine Möglichkeit, diese Tage mit dem Date-Objekt zu finden? Ich fand diesen Link zum Beispiel: Displaying all the days of a month aber ich verstehe es nicht wirklich, plus es ist Java, ich versuche, eine Lösung in Javascript zu finden.

Vielen Dank für Ihre Hilfe

+0

Was bedeutet "in diesen Tagen finden" oder "habe diese Tage" wirklich? Ziel ist nicht klar – charlietfl

Antwort

37

Um eine Liste aller Tage in einem Monat zu erhalten, können Sie mit einem Date am ersten Tag eines Monats beginnen, erhöhen Sie den Tag, bis der Monat sich ändert.

/** 
* @param {int} The month number, 0 based 
* @param {int} The year, not zero based, required to account for leap years 
* @return {Date[]} List with date objects for each day of the month 
*/ 
function getDaysInMonth(month, year) { 
    var date = new Date(year, month, 1); 
    var days = []; 
    while (date.getMonth() === month) { 
     days.push(new Date(date)); 
     date.setDate(date.getDate() + 1); 
    } 
    return days; 
} 

Beispiel http://jsfiddle.net/kKj8h/1/

+0

Vielen Dank Juan, das ist genau das, was ich brauchte! Vielen Dank – Paul

+0

Geringfügige Korrektur für den Code date.setDate (date.getDate() + 1); sollte vor date.push Array-Aufruf gehen – Timothy

+0

@Timothy Was ist der Testfall, dass dies nicht funktioniert? –

4

ich aus Ihrer Beschreibung nicht sicher bin, ob die Standard-Datumsauswahl deaktivieren Termine mit Ihnen zusammenarbeiten wird, also werde ich Sie direkt in Frage beantworten.

Sie können, indem Sie diese eine Reihe von Tagen für einen Monat ziemlich leicht konstruieren:

var numOfDays = new Date(2012, 10, 0).getDate(); //use 0 here and the actual month 
var days = new Array(); 

//This will construct an array with all the elements represent the day of the week 
//(i.e. Oct 30th would be days[30-1] or days[29]) and the value would be the actual 
//day of the week (i.e. Tuesday which is representing by the number 2) 
for(var i=0;i<=numOfDays;i++) 
{ 
    days[i] = new Date(2012,9,i+1).getDay(); //use month-1 here    
} 
//This will give you a number from 0 - 6 which represents (Sunday - Saturday) 
alert(days[29]); 

das Array von Tagen können Sie in so ziemlich alles tun, was man will und wissen, den Tag der Woche auch.

+0

danke Jeremy für Ihre Antwort! – Paul

1

Hier ist ein loopp, die durch jeden Monat läuft den letzten Tag des Monats zu bestimmen. JavaScript Date-Objekt indiziert Monate, die bei Null beginnen, und wenn Sie den Tag auf Null setzen, wird auf den letzten Tag des vorherigen Monats zurückgesetzt. Praktisch für für

Februar Schaltjahr letzten Tag der Bestimmung ist

Date(2012, 12, 0) zurück 31. Dezember 2012

Date (2012,0,0) kehrt Dezember 31,2011

und die alle wichtig, um herauszufinden, Februar mit

Date (2012,3,0) Kosten 29. Februar seit Schaltjahr in diesem Jahr

var mos=['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'] 

for (i = 0; i < 12; i++) { 
    var lastDate = new Date(2012, i+1, 0); 
    $('body').append('Last day of ' + mos[i] + ' is ' + lastDate.getDate()+'<br>') 
} 

DEMO: http://jsfiddle.net/5k8sn/1/

+0

Danke charlietfl für Ihre Antwort! – Paul

1

Ich habe die Funktionalität, die Sie angefordert haben, mit einem jQuery Datepicker implementiert.

Fügen Sie zunächst alle im Back-Office ausgewählten Daten in ein Array

// format yyyy-mm-dd 
var disabledDates = [ 
    "2012-10-01", 
    "2012-10-02", 
    "2012-10-30", 
    "2012-09-12" 
]; 

Zweite deaktiviert werden, geben die Datepicker mit zwei Funktionen

$("#datepicker").datepicker({ 

    // only enable date if dateEnabled returns [true] 
    beforeShowDay: dateEnabled, 

    // once a date has been selected call dateSelected 
    onSelect: dateSelected 
}); 

Hier ist die Definition der erforderlichen Funktionen

function dateEnabled(d) { 

    // if date found in array disable date 
    if(disabledDates.indexOf(getDate(d)) > -1) { 

     return [false]; 

    } else { 

     return [true] ; 

    } 
} 

Konvertieren Sie Datum in Zeichenfolge für den Vergleich mit Daten in Array

function getDate(d) { 
    var day, 
     month, 
     year; 

    day = d.getDate(); 
    month = d.getMonth() + 1; // add 1 as getMonth returns 0 - 11 
    year = d.getFullYear(); 

    if(month < 10) month = "0" + month; 
    if(day < 10) day = "0" + day; 
    return year + "-" + month + "-" + day; 
} 

Sobald ein Datum zu verarbeiten

function dateSelected(d) { 
    // do stuff with string representation of date           
} 

hier ausgewählt worden ist, ist eine Geige http://jsfiddle.net/KYzaR/7/

Ich dachte, es würde sich lohnen zu erwähnen, dass Array.indexOf eine neue Ergänzung ECMA ist -262 Standard und so im Fall von IE7 und IE8 wird es nicht unterstützt. Die folgende MDN-Seite enthält Code, der Array.indexOf für diese Browser implementiert https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf

+0

vielen Dank Bruno, das ist genau das, was ich gesucht habe! – Paul

+0

@Juan Mendes Ich bin nicht sicher zu verstehen, was du meinst, wie sollten wir tun, wenn wir indexOf nicht verwenden? – Paul

+0

@Juan Mendes in Ordnung, danke – Paul

Verwandte Themen