Как я могу получить текущую четверть, в которой мы находимся с помощью javascript? Я пытаюсь определить, в какой части мы сейчас находимся, например. 2.
EDIT И как я могу подсчитать количество дней, оставшихся в квартале?
Как я могу получить текущую четверть, в которой мы находимся с помощью javascript? Я пытаюсь определить, в какой части мы сейчас находимся, например. 2.
EDIT И как я могу подсчитать количество дней, оставшихся в квартале?
Учитывая, что вы не предоставили никаких критериев для определения того, в какой четверти "* мы в настоящее время находимся", можно предложить алгоритм, который необходимо затем адаптировать к любым критериям, которые вам нужны. например
// 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;
}
Как бегущий фрагмент, включая год:
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')}');
Предполагая, что с января по март считаются Q1 (некоторые страны/компании отделяют свой финансовый год от своего календарного года), следующий код должен работать:
var today = new Date();
var quarter = Math.floor((today.getMonth() + 3) / 3);
Это дает вам:
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
Что касается того, как получить оставшиеся дни в квартале, он в основном выясняет первый день следующего квартала и разрабатывает разницу, что-то вроде:
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;
Это непроверенная, но теория звучит. В основном создайте дату, соответствующую следующему кварталу, преобразуйте ее и сегодня в миллисекунды с начала эпохи, тогда разница будет равна миллисекундам.
Разделите это на количество миллисекунд в день, и у вас есть разница в днях.
Это дает вам (по крайней мере примерно) количество дней, оставшихся в квартале. Возможно, вам потребуется настроить его, чтобы все времена были установлены на одно и то же значение (00:00:00), чтобы разница была в точные дни.
Он также может быть отключен одним, в зависимости от вашего фактического определения "дней, оставшихся в квартале".
Но это должна быть хорошая отправная точка.
Если первое решение не работает, вы можете просто отрегулировать его в диапазоне, который вы хотели бы
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;
Зависит от месяца
var date = new Date();
var quarter = parseInt(date.getMonth() / 3 ) + 1 ;
Зависит от даты
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.
Это сработало для меня!
var d = new Date();
var quarter = Math.ceil(d.getMonth() / 3);
console.log(quarter)
Он неэффективен и не читается, но в аромате oneliner.
(new Date(new Date().getFullYear(), Math.floor((new Date().getMonth() + 3) / 3) * 3, 1) - new Date()) / 86400000
function getQuarter(d) {
return Math.floor((d.getMonth()/3 % 4) + 1);
}
var d = new Date();
var index = 15
l = moment(moment(d).subtract((index - 1) * 3, 'months').toISOString()).subtract(1, 'months').toISOString()