0
votes

JS Calculez tous les jours entre deux dates

Nous considérons que j'ai les dates suivantes: xxx

Le résultat que je voudrais avoir est une chose telle: xxx

Si j'avais une telle chose: xxx

Le résultat que je voudrais avoir est une chose telle: xxx

quoi Je voudrais faire est d'imprimer dans un tableau, tous les jours entre la date de début et la date de fin.

J'essayais quelque chose comme ça, mais j'ai des problèmes: < Pré> xxx


2 commentaires

Avez-vous vu Ce ? Lorsque vous dites des problèmes, pouvez-vous décrire les problèmes que vous rencontrez?


Ceci est 3 questions dans une (parse, ajoutez 1 jour, format), qui ont tous été répondu beaucoup, à plusieurs reprises auparavant.


3 Réponses :


0
votes

Une approche serait d'extraire les "parties" numéiques de vos chaînes de la date d'entrée à partir de code> et à code> en félicitant contre / code> caractères: XXX PRE>

Une fois que vous avez ces pièces de date en tant qu'élevers, la plage de dates peut être itérale via une boucle pour la boucle où, par itération, vous ajoutez un objet d'élément au résultat code> Array basé sur l'itération actuelle de cette boucle: P> xxx pré>

par itération, vous vérifieriez également si la date suivante sera itératée est égale au numéro "Pièces" de la date à code> (ainsi que d'incrémenter le mois et l'année en cours selon les besoins): p>

p>

const numDaysInMonth = (month, year) => new Date(year, month, 0).getDate()
const extractParts = (date) => date.split("/").map(part => Number.parseInt(part));

const calcDaysBetweenDates = (from, to) => {

  const [fromDay, fromMonth, fromYear] = extractParts(from);
  const [toDay, toMonth, toYear] = extractParts(to);
  const result = [];

  // Iterate over from-to range starting at from year/month/day
  for (let year = fromYear, month = fromMonth, day = fromDay;;) {

    // Add item object for current day/month/year to result array
    result.push({
      day,
      month,
      year
    });

    // Increment day
    day++;

    // If next day past current month, reset day, increment month
    if (day > numDaysInMonth(month, year)) {
      month++;
      day = 1;
    }

    // If next month past current year, reset month, increment year
    if (month > 12) {
      month = 1;
      year++;
    }

    // If next day and month and year past to day/month/year, exit loop
    if (day >= toDay && month >= toMonth && year >= toYear) {
      break;
    }
  }

  // Add to date for range inclusivity 
  result.push({
    day: toDay,
    month: toMonth,
    year: toYear
  });

  return result;
}

console.log(calcDaysBetweenDates("21/09/2019", "29/09/2019"));
console.log(calcDaysBetweenDates("21/09/2019", "7/10/2019"));
console.log(calcDaysBetweenDates("25/12/2019", "5/1/2020"));


2 commentaires

Il semble y avoir un problème avec votre script, avec la deuxième date: "09/21/2019", "7/10/2019" Cela me donne aussi 09/11/2019, mais cette date n'existe pas.


@Paul désolé pour cela, calculait le nombre de jours pour le mois prochain plutôt que le courant. Juste mis à jour Script - Cela aide-t-il?



0
votes

Vous pouvez ajouter la date d'une date de démarrage de la date et de la date d'objection prendra soin de la validation de la nouvelle date, c'est-à-dire le mois prochain ou l'année suivante, ainsi que tous, répétez la date de fin de la date de fin TODATE code> est supérieure à la date de début fromdate code>.

p>

let from = "23/09/2019";
let to = "29/10/2019";

// convert to date object by interchanging date/month expected by Date function
let fromDate = new Date(from.replace(/([0-9]+)\/([0-9]+)/,'$2/$1'));
let toDate = new Date(to.replace(/([0-9]+)\/([0-9]+)/,'$2/$1'));

let response = [];
while(toDate > fromDate){
  response.push({day: fromDate.getDate(), month: fromDate.getMonth()+1, year: fromDate.getFullYear()});
  fromDate.setDate(fromDate.getDate()+1) // increment date by 1
}

console.log(response)


5 commentaires

Il semble y avoir un problème avec votre script, si vous voyez la valeur de retour de la console, les valeurs commencent à partir de la date suivante: 08/24/2019, mais la date à laquelle vous le rendez commence à partir du 09/23/2019.


mois est un tableau 0 indexé. J'ai mis à jour la réponse


Si je voulais inclure même le premier jour et ne pas l'exclure?


Vous pouvez définitivement, incrémenter après avoir poussé au tableau. Vérifier la réponse mise à jour


Cela a-t-il fonctionné pour vous?



-1
votes

Vous pouvez utiliser MOMENT avec plage de moments .

p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-range/4.0.2/moment-range.js"></script>


0 commentaires