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?
É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.
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);
}
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.
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;
Cela a fonctionné pour moi!
var d = new Date();
quarter = Math.ceil(d.getMonth()/3);
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.
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