Je rencontre un problème lorsque je travaille avec des objets de date javascript, en particulier, lorsque j'essaie d'ajouter un jour à un objet date. La fonction que j'écris prend une date de début et crée une liste des sept prochains jours, utilisés comme en-têtes d'une application de calendrier "vue de la semaine". Lorsque les dates de la semaine qu'il détermine sont dans le même mois, ma fonction fonctionne comme prévu. Quand on passe au mois suivant, les choses se gâtent.ajouter un jour à une date javascript l'objet ne fonctionne pas lors du passage au mois suivant
Ma liste date fonction de génération (REMARQUE: la méthode .toHdr() est une méthode de date personnalisée que j'ai créé, comme .clone()):
getWeekDates : function(date){
/*
* Given a date object, returns a list of dates strings that
* become the header of the week view
*/
var _d = date.clone(), dates = [];
for(var i=1; i<=7; i++){
dates.push(_d.toHdr());
_d.setDate(date.getDate() + i);
}
return dates;
}
Lorsque la date passée à cette fonction est quelque chose comme « lundi 11 Octobre » (comme un objet de date), la fonction ci-dessus retours:
["Monday - Oct. 11, 2010", "Tuesday - Oct. 12, 2010", "Wednesday - Oct. 13, 2010", "Thursday - Oct. 14, 2010", "Friday - Oct. 15, 2010", "Saturday - Oct. 16, 2010", "Sunday - Oct. 17, 2010"]
Cependant, lorsqu'il est passé une date comme « dimanche 31 Octobre », la liste renvoyée ressemble:
["Sunday - Oct. 31, 2010", "Monday - Nov. 1, 2010", "Friday - Dec. 3, 2010", "Monday - Jan. 3, 2011", "Friday - Feb. 4, 2011", "Tuesday - Mar. 8, 2011", "Wednesday - Apr. 6, 2011"]
Évidemment, ajouter un jour à la fois à un objet date devient problématique lorsque vous passez à un autre mois, je ne suis pas sûr de savoir comment le contourner. Des idées?
EDIT:
Date.prototype.toHdr = function(){
/*
* Convenience method for creating a formatted string that will be used in
* all headers with a specific date.
*/
var dayMapping = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var monthMapping = ['Jan.','Feb.','Mar.','Apr.','May','June','July','Aug.','Sept.','Oct.','Nov.','Dec.'];
return dayMapping[this.getDay()] + ' - ' + monthMapping[this.getMonth()] + ' ' + this.getDate() + ', ' + this.getFullYear();
};
Date.prototype.clone = function(){
/*
* Clone a date object, useful for creating a copy of a date, so the
* original isn't modified.
*/
return new Date(this.getTime());
}
Merci Matt, je vais donner un coup d'oeil que lib. – Greg