0
votes

Afficher tous les 12 mois en série mais à partir du mois en cours

Je travaille sur une exigence où j'ai 12 diapositives d'ion et que les noms des diapositives sont des noms de mois à partir du mois en cours. Pour EX: Si le mois en cours est juin, le nom de la première diapositive devrait commencer à partir du 20 juin 2020 et aller jusqu'au mai 2021. Eh bien, je l'ai essayé mais que je ne pouvais pas atteindre. Même si je gère le mois, je ne suis pas en mesure de changer de manière dynamique l'année après décembre. Voici mon code:

mon fichier HTML xxx

mon fichier .ts xxx

et ainsi de suite pour tous autre mois. J'ai besoin d'automatiser complètement le mois et l'année à partir du mois en cours. Puis-je savoir où j'ai mal tourné?


2 commentaires

Je suppose que l'année est incorrecte, car vous ne modifiez jamais la date initiale d . Ce que vous pourriez faire à la place est une boucle et tout simplement augmenter le mois de 1 dans chaque itération. Comme d.setmonth (d.getmonth () + 1) . Dans les deux cas, vous devez réellement ajouter le mois à d pour augmenter correctement votre variable de date et non utiliser le juse d.getmonth () + 2 pour obtenir la traduction du mois correct.


Essayé mais avait des problèmes avec l'année


3 Réponses :


1
votes

Pour modifier correctement la date à laquelle vous devez augmenter la date d'atteindre le montant des mois à l'objet de date (dans votre cas d code>):

p>

var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

var d = new Date();
d.setDate(1); //REM: To prevent month skipping.

for(var i=0; i<12; i++){
  d.setMonth(d.getMonth() + 1);
  console.log(monthNames[d.getMonth()], d.getFullYear())
};


3 commentaires

Merci beaucoup, c'est ce que je voulais mettre en œuvre.


@Ravishah Vous devez faire attention avec cela, en ajoutant un mois si votre date est votre date le 31 août sauvera septembre car il n'a que 30 jours: var d = nouvelle date ('2020-08-31 12:00'); d.setmonth (d.getmonth () + 1);


@Jason Goemaat, c'est-à-dire ce que le d.setDate (1) est là pour.



1
votes

C'est ce que j'ai proposé: xxx

essentiellement 2 pour les boucles, la première itération du mois en cours à la fin de l'année, puis la seconde du début de la année au mois en cours - bien que l'ajout d'un an.


0 commentaires

2
votes

Vous pouvez créer une date, puis incrémenter le mois par 1 onze fois pour obtenir 12 mois de dates. Le nom du mois peut être trouvé à l'aide de tolocalestring em> avec des options appropriées.

Vous devez faire attention lorsque des mois incrémentés, par exemple P>

// Optionally provide a date for the starting month
function getMonthNames(date = new Date()) {
  // Copy input date so don't modify it
  let d = new Date(+date);
  // Set to 1st of month
  d.setDate(1);
  let result = [];
  // Get 12 month names, starting with current month
  for (let i=0; i<12; i++) {
    result.push(d.toLocaleString('default',{month:'long'}));
    d.setMonth(d.getMonth() + 1);
  }
  return result;
}

console.log(getMonthNames());


4 commentaires

J'aime cette approche mais je dois aussi ajouter que je ne suis pas fan de tolocalestring () . Habituellement, les utilisateurs peuvent choisir des langues indépendantes de la culture ou des paramètres locaux, ce qui me mêle un peu avec ce script. En outre, par exemple, si j'ai regardé ce site tout le texte serait en anglais pourtant, les mois sont soudainement en français. Juste quelque chose à prendre conscience de.


@ JavaScript - vous êtes absolument correct, l'option de langue (appelée de manière inappropriée «locale») doit être définie sur la langue de la page, donc «fr» dans ce cas. Je viens d'utiliser "Par défaut" pour le bien de la démo.


Certainement. Le problème avec c'est le manque de soutien "locale". Sauf si elle a été corrigée sur divers navigateurs maintenant. J'avoue que je n'ai pas essayé depuis un moment.


@ JavaScript-Support par les navigateurs actuels est plutôt bon. Selon MDN vous Doit remonter un long chemin à manquer sur le support "Locales", même IE11 l'a (publié en 2013).