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
.Il s'agit d'un moyen simple de trouver le jour actuel de l'année, et il devrait tenir compte des années bissextiles sans problème :
Javascript :
Math.round((new Date().setHours(23) - new Date(new Date().getYear()+1900, 0, 1, 0, 0, 0))/1000/60/60/24);
Javascript dans Google Apps script :
Math.round((new Date().setHours(23) - new Date(new Date().getYear(), 0, 1, 0, 0, 0))/1000/60/60/24);
L'action principale de ce code est de trouver le nombre de millisecondes qui se sont écoulées dans l'année en cours, puis de convertir ce nombre en jours. Le nombre de millisecondes qui se sont écoulées dans l'année en cours peut être trouvé en soustrayant le nombre de millisecondes de la première seconde du premier jour de l'année en cours, qui est obtenu avec new Date(new Date().getYear()+1900, 0, 1, 0, 0, 0)
(Javascript) ou new Date(new Date().getYear(), 0, 1, 0, 0, 0)
(Google Apps script), à partir des millisecondes de la 23ème heure du jour courant, qui a été trouvé avec new Date().setHours(23)
. Le réglage de la date actuelle à la 23e heure a pour but d'assurer que le jour de l'année est correctement arrondi en Math.round()
.
Une fois que vous avez le nombre de millisecondes de l'année en cours, vous pouvez convertir ce temps en jours en divisant par 1000 pour convertir les millisecondes en secondes, puis en divisant par 60 pour convertir les secondes en minutes, puis en divisant par 60 pour convertir les minutes en heures, et enfin en divisant par 24 pour convertir les heures en jours.
Note : Ce post a été modifié pour tenir compte des différences entre JavaScript et JavaScript implémenté dans Google Apps script. De plus, plus de contexte a été ajouté pour la réponse.
Je pense que c'est plus simple :
var date365 = 0;
var currentDate = new Date();
var currentYear = currentDate.getFullYear();
var currentMonth = currentDate.getMonth();
var currentDay = currentDate.getDate();
var monthLength = [31,28,31,30,31,30,31,31,30,31,30,31];
var leapYear = new Date(currentYear, 1, 29);
if (leapYear.getDate() == 29) { // If it's a leap year, changes 28 to 29
monthLength[1] = 29;
}
for ( i=0; i < currentMonth; i++ ) {
date365 = date365 + monthLength[i];
}
date365 = date365 + currentDay; // Done!
Cette méthode tient compte de la question des fuseaux horaires et de l'heure d'été.
function dayofyear(d) { // d is a Date object
var yn = d.getFullYear();
var mn = d.getMonth();
var dn = d.getDate();
var d1 = new Date(yn,0,1,12,0,0); // noon on Jan. 1
var d2 = new Date(yn,mn,dn,12,0,0); // noon on input date
var ddiff = Math.round((d2-d1)/864e5);
return ddiff+1;
}
(extrait de aquí )
Voir aussi violon
Math.round((new Date().setHours(23) - new Date(new Date().getFullYear(), 0, 1, 0, 0, 0))/1000/86400) ;
optimise encore la réponse.
De plus, en changeant setHours(23) ou l'avant-dernier zéro plus tard par une autre valeur, on peut obtenir le jour de l'année lié à un autre fuseau horaire. Par exemple, pour récupérer depuis l'Europe une ressource située en Amérique.
Je voudrais fournir une solution qui effectue les calculs en ajoutant les jours pour chaque mois précédent :
function getDayOfYear(date) {
var month = date.getMonth();
var year = date.getFullYear();
var days = date.getDate();
for (var i = 0; i < month; i++) {
days += new Date(year, i+1, 0).getDate();
}
return days;
}
var input = new Date(2017, 7, 5);
console.log(input);
console.log(getDayOfYear(input));
Ainsi, vous n'avez pas à gérer les détails des années bissextiles et de l'heure d'été.
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.