Comment utiliser JavaScript pour calculer le jour de l'année, de 1 à 366 ?
Par exemple :
-
January 3
devrait être3
. -
February 1
devrait être32
.
Comment utiliser JavaScript pour calculer le jour de l'année, de 1 à 366 ?
Par exemple :
January 3
devrait être 3
.February 1
devrait être 32
.Si vous ne voulez pas réinventer la roue, vous pouvez utiliser l'excellent logiciel date-fns (node.js) :
var getDayOfYear = require('date-fns/get_day_of_year')
var dayOfYear = getDayOfYear(new Date(2017, 1, 1)) // 1st february => 32
const dayOfYear = date => {
const myDate = new Date(date);
const year = myDate.getFullYear();
const firstJan = new Date(year, 0, 1);
const differenceInMillieSeconds = myDate - firstJan;
return (differenceInMillieSeconds / (1000 * 60 * 60 * 24) + 1);
};
const result = dayOfYear("2019-2-01");
console.log(result);
Si je comprends bien, vous voulez 366 pour une année bissextile, 365 sinon, non ? Une année est bissextile si elle est divisible par 4, mais pas par 100, sauf si elle est aussi divisible par 400 :
function daysInYear(year) {
if(year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)) {
// Leap year
return 366;
} else {
// Not a leap year
return 365;
}
}
Dans ce cas, je ne pense pas qu'il y ait une méthode intégrée ; vous devrez le faire :
function daysInFebruary(year) {
if(year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)) {
// Leap year
return 29;
} else {
// Not a leap year
return 28;
}
}
function dateToDay(date) {
var feb = daysInFebruary(date.getFullYear());
var aggregateMonths = [0, // January
31, // February
31 + feb, // March
31 + feb + 31, // April
31 + feb + 31 + 30, // May
31 + feb + 31 + 30 + 31, // June
31 + feb + 31 + 30 + 31 + 30, // July
31 + feb + 31 + 30 + 31 + 30 + 31, // August
31 + feb + 31 + 30 + 31 + 30 + 31 + 31, // September
31 + feb + 31 + 30 + 31 + 30 + 31 + 31 + 30, // October
31 + feb + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31, // November
31 + feb + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30, // December
];
return aggregateMonths[date.getMonth()] + date.getDate();
}
(Oui, j'ai vraiment fait ça sans copier ni coller. S'il y a un moyen facile, je serai furieux)
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.
4 votes
var days = new Date().getFullYear() % 4 == 0 ? 366 : 365;
0 votes
Mais vraiment, je ne suis pas sûr de ce que vous voulez dire. Vous voulez juste le nombre de jours dans l'année ? Ou entre deux dates ?
20 votes
Fyi @xeon06, le calcul des années bissextiles est un peu plus compliqué que de moduler par 4. voir : algorithme des années bissextiles
4 votes
@Xeon06 : C'est correct seulement la plupart du temps. De Wikipedia : Les années divisibles par 100 ne sont pas bissextiles, à moins qu'elles ne soient également divisibles par 400. sont les années bissextiles.
0 votes
Ah bien, je me suis trompé. @minitech semble avoir la bonne réponse alors.
0 votes
Désolé Xeon06, je veux obtenir le cumul annuel.
0 votes
@Sophia Ok, j'ai mis à jour ma réponse :)
0 votes
Je ne peux pas croire qu'il n'existe pas une fonction existante sur l'objet Date pour cela.