webentwicklung-frage-antwort-db.com.de

Finde alle Tage in einem Monat mit Datumsobjekt?

gibt es eine Möglichkeit, alle Tage eines Monats oder eines Jahres zu haben? Ich suche dies, um einige bestimmte Tage in einem Datepicker zu deaktivieren. Ich hätte eine Seite im Backoffice, um diese Tage zum Deaktivieren auszuwählen.

Also müsste ich alle Tage in einem Monat anzeigen und jeden Tag einen "Aktivieren oder Deaktivieren" -Button hinzufügen. Gibt es eine Möglichkeit, diese Tage mit dem Date-Objekt zu finden? Ich fand diesen Link zum Beispiel: Anzeige aller Tage eines Monats aber ich verstehe es nicht wirklich, plus es ist Java, ich versuche, eine Lösung in Javascript zu finden.

Danke für deine Hilfe

11
Paul

Um eine Liste aller Tage eines Monats zu erhalten, können Sie am ersten Tag eines Monats mit einer Date beginnen. Erhöhen Sie den Tag, bis sich der Monat ä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/

45
Juan Mendes

Ich weiß nicht aus Ihrer Beschreibung, ob der standardmäßige Datums-Datums-Deaktivierungsdatum für Sie geeignet ist. Daher beantworte ich Sie direkt.

Sie können ganz einfach eine Reihe von Tagen für einen Monat erstellen, indem Sie Folgendes tun:

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]); 

Anhand dieser Reihe von Tagen können Sie so ziemlich alles machen, was Sie möchten, und auch den Tag der Woche kennen.

5

Ich habe die von Ihnen angeforderte Funktionalität mit einem jQuery-Datepicker implementiert.

Fügen Sie zunächst alle im Back Office ausgewählten Daten, die deaktiviert werden sollen, einem Array hinzu

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

Zweitens geben Sie den Datepicker mit zwei Funktionen an

$("#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 das Datum in einen String, um es mit einem Datum im Array zu vergleichen

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 ausgewählt wurde, bearbeiten Sie es

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

Hier ist eine Geige http://jsfiddle.net/KYzaR/7/

Man denke nur, dass es erwähnenswert wäre, dass Array.indexOf eine neue Erweiterung des ECMA-262-Standards ist und daher im Fall von IE7 und IE8 nicht unterstützt wird. 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

1
Bruno

Hier ist ein Loopp, der jeden Monat durchgeht, um den letzten Tag dieses Monats zu bestimmen. Das Javascript-Datumsobjekt indiziert Monate, die bei Null beginnen. Wenn Sie den Tag auf Null setzen, wird der letzte Tag des vorherigen Monats wiederhergestellt. Praktisch für die Bestimmung des letzten Jahres des Schaltjahres für Februar

Date( 2012, 12, 0) wird am 31. Dezember 2012 zurückkehren

Date (2012,0,0) gibt den 31. Dezember 2011 zurück

und der allerwichtigste ist der Februar mit 

Date ( 2012,3,0) Gibt den 29. Februar seit dem Schaltjahr in diesem Jahr zurück

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/

1
charlietfl

Um Datumsangaben in einem Datepicker zu deaktivieren, können Sie die hier beschriebene Antwort verwenden:
https://stackoverflow.com/a/12061715/48082

Um mehrere Daten auszuwählen (wie in der Back-Office-App), können Sie dieses Plugin verwenden:
http://multidatespickr.sourceforge.net/

0
Cheeso

One liner um alle Tage eines Monats als Date-Objekt zu erhalten

const getDaysInMonth = (month, year) => (new Array(31)).fill('').map((v,i)=>new Date(year,month-1,i+1)).filter(v=>v.getMonth()===month-1)
0
rturkek