2 votes

JavaScript : existe-t-il un moyen de détecter qu'une date donnée dans un tel format se situe dans les X derniers jours ?

J'ai un tas de timestamp formatés comme ceci

const dates = ['2021.6.01', '2021.6.11', '2021.9.02']

Je voulais écrire un utilitaire qui puisse me dire si une date avec un tel format est dans les X derniers jours d'une autre date.

Par exemple, 2021.6.10 est dans les 7 derniers jours de 2021.6.12 tandis que 2021.6.01 n'est pas dans les 7 derniers jours de 2021.6.12 .

Je pensais que l'interface API serait mais n'hésitez pas à suggérer un meilleur nom.

function isWithinTheLastDays(originalDate, date, days)

Je l'ai trouvé très difficile à mettre en œuvre à la main et il y a beaucoup de cas limites.

0voto

Spectric Points 5627

Analyser les dates avec la fonction Date Constructeur soustraire les deux dates et convertir la différence en millisecondes en jours (en divisant par 86400000), puis vérifier si elle est inférieure ou égale à days :

function isWithinTheLastDays(originalDate, date, days){
  return (new Date(date) - new Date(originalDate)) / 86400000 <= days;
}

console.log(isWithinTheLastDays('2021.6.10', '2021.6.12', 7)) //2 day diff
console.log(isWithinTheLastDays('2021.6.10', '2021.6.17', 7)) //7 day diff
console.log(isWithinTheLastDays('2021.6.10', '2021.6.18', 7)) //8 day diff

2 votes

Je ne sais pas pourquoi cette réponse a été DVed alors qu'elle répond précisément à l'exigence.

-1voto

hisam Points 744

Vous pouvez essayer ceci :

Remarque : cette option renvoie la réponse vraie si les dates sont de X jours. après et avant la date que vous avez fixée

const dates = ['2021.08.26', '2021.6.11', '2021.9.02']

function isWithinDays({ originalDate, date, range }) {
  return parseInt(((new Date(date) - new Date(originalDate)) / (1000 * 60 * 60 * 24)), 10) <= range && parseInt(((new Date(date) - new Date(originalDate)) / (1000 * 60 * 60 * 24)), 10) >= 0 ? true : false
}

for (var i = 0; i < dates.length; i++) {
  console.log(isWithinDays({
    originalDate: dates[i],
    date: new Date('2021-08-27'),
    range: 10
  }))
}

0 votes

getDate() renvoie le jour du mois. La soustraction du jour du mois pour les deux dates ne renvoie la différence de jours que si elles sont dans le même mois.

-1voto

Elhadede Points 13

En le transformant en timestamp Unix et en le soustrayant

function isWithinTheLastDays(originalDate, date, days){
    if(Math.abs(
    new Date(date).getTime()/1000
    - new Date(originalDate).getTime()/1000
    )/60/60/24 >= days){
        return true;
    }else{
        return false;
    };
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X