web-dev-qa-db-fra.com

Obtenez le trimestre en cours avec javascript

Comment puis-je obtenir le trimestre en cours avec javascript? J'essaie de détecter le quartier dans lequel nous nous trouvons actuellement, par exemple. 2.

EDITEt comment puis-je compter le nombre de jours restant dans le trimestre?

22
John Doe

Étant donné que vous n'avez pas indiqué de critères permettant de déterminer le trimestre "* dans lequel nous nous trouvons", vous pouvez suggérer un algorithme que vous devez ensuite adapter à tout critère souhaité. par exemple.

// For the US Government fiscal year
// Oct-Dec = 1
// Jan-Mar = 2
// Apr-Jun = 3
// Jul-Sep = 4
function getQuarter(d) {
  d = d || new Date();
  var m = Math.floor(d.getMonth()/3) + 2;
  return m > 4? m - 4 : m;
}

En tant qu'extrait exécutable et comprenant l'année:

function getQuarter(d) {
  d = d || new Date();
  var m = Math.floor(d.getMonth() / 3) + 2;
  m -= m > 4 ? 4 : 0;
  var y = d.getFullYear() + (m == 1? 1 : 0);
  return [y,m];
}

console.log(`The current US fiscal quarter is ${getQuarter().join('Q')}`);
console.log(`1 July 2018 is ${getQuarter(new Date(2018,6,1)).join('Q')}`);

Vous pouvez ensuite l’adapter aux différents trimestres financiers ou civils, selon le cas. Vous pouvez aussi faire:

function getQuarter(d) {
  d = d || new Date(); // If no date supplied, use today
  var q = [4,1,2,3];
  return q[Math.floor(d.getMonth() / 3)];
}

Utilisez ensuite différents tableaux q en fonction de la définition du trimestre requise.

Modifier

Ce qui suit obtient les jours restants dans un trimestre s'ils commencent le 1er janvier, avril, juillet et octobre. Il a été testé dans différents navigateurs, y compris IE 6 (bien que, puisqu'il utilise ECMAScript, il devrait fonctionner partout):

function daysLeftInQuarter(d) {
  d = d || new Date();
  var qEnd = new Date(d);
  qEnd.setMonth(qEnd.getMonth() + 3 - qEnd.getMonth() % 3, 0);
  return Math.floor((qEnd - d) / 8.64e7);
}
34
RobG

En supposant que les mois de janvier à mars sont considérés comme du premier trimestre (certains pays/sociétés séparent leur exercice de leur année civile), le code suivant devrait fonctionner:

var today = new Date();
var quarter = Math.floor((today.getMonth() + 3) / 3);

Cela vous donne:

Month      getMonth()  quarter
---------  ----------  -------
January         0         1
February        1         1
March           2         1
April           3         2
May             4         2
June            5         2
July            6         3
August          7         3
September       8         3
October         9         4
November       10         4
December       11         4

Pour obtenir le nombre de jours restant dans le trimestre, il s'agit essentiellement de déterminer le premier jour du prochain trimestre et de calculer la différence, comme par exemple:

var today = new Date();
var quarter = Math.floor((today.getMonth() + 3) / 3);
var nextq;
if (quarter == 4) {
    nextq = new Date (today.getFullYear() + 1, 1, 1);
} else {
    nextq = new Date (today.getFullYear(), quarter * 3, 1);
}
var millis1 = today.getTime();
var millis2 = nextq.getTime();
var daydiff = (millis2 - millis1) / 1000 / 60 / 60 / 24;

Cela n'a pas été testé, mais la théorie est valable. Fondamentalement, créez une date correspondant au prochain trimestre, convertissez-la et aujourd'hui en millisecondes depuis le début de l'époque, puis la différence est le nombre de millisecondes.

Divisez cela par le nombre de millisecondes dans une journée et vous avez la différence en jours.

Cela vous donne (au moins approximativement) le nombre de jours restant dans le trimestre. Vous devrez peut-être ajuster le réglage pour vous assurer que tous les temps sont réglés sur la même valeur (00:00:00) afin que la différence soit en jours exacts.

Il peut également être décalé de un, en fonction de votre définition actuelle de "jours restants dans le trimestre".

Mais cela devrait être un bon point de départ.

53
paxdiablo

si la première solution ne fonctionne pas, il vous suffit de l'ajuster à la plage souhaitée

var today = new Date();
var month = now.getMonth();
var quarter;
if (month < 4)
  quarter = 1;
else if (month < 7)
  quarter = 2;
else if (month < 10)
  quarter = 3;
else if (month < 13)
  quarter = 4;
5
Tom Prats

Cela a fonctionné pour moi! var d = new Date(); quarter = Math.ceil(d.getMonth()/3);

2
Divya

Dépend du mois

 var date = new Date();     
 var quarter =  parseInt(date.getMonth() / 3 ) + 1 ;

Dépend de la date

 var date = new Date();    
 var firstday = new Date(date.getFullYear(),0,1); // XXXX/01/01
 var diff = Math.ceil((date - firstday) / 86400000); 
 // a quarter is about 365/4 
 quarter =  parseInt( diff / ( 365/ 4 )) + 1 
 // if today is 2012/01/01, the value of quarter  is  1.
2
Shih-En Chou

Ce n'est pas efficace ou lisible mais c'est dans la saveur unique.

(new Date(new Date().getFullYear(), Math.floor((new Date().getMonth() + 3) / 3) * 3, 1) - new Date()) / 86400000
0
Matas Vaitkevicius