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
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;
}
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.
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
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>')
}
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/
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)