170 votes

JavaScript calcule le jour de l'année (1 - 366)

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 .

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

4voto

Liz Page-Gould Points 186

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.

4voto

Sean Points 95

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!

3voto

Andriy F. Points 714

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

2voto

Massimo Roscio Points 21

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.

1voto

manix Points 1

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.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