Wie bekomme ich das aktuelle Quartal, in dem wir mit Javascript sind? Ich versuche herauszufinden, in welchem Quartal wir uns gerade befinden, z. 2.
EDITUnd wie kann ich die Anzahl der verbleibenden Tage im Quartal zählen?
Da Sie keine Kriterien angegeben haben, um herauszufinden, in welchem Quartal "* wir sind derzeit" festgelegt sind, kann ein Algorithmus vorgeschlagen werden, den Sie dann an die von Ihnen benötigten Kriterien anpassen müssen. z.B.
// 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;
}
Als lauffähiges Snippet und einschließlich des Jahres:
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')}`);
Sie können dies dann an die verschiedenen Finanz- oder Kalenderquartale anpassen. Sie können auch tun:
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)];
}
Verwenden Sie dann unterschiedliche q
-Arrays, abhängig von der Definition des erforderlichen Viertels.
Die folgenden Tage erhalten die verbleibenden Tage in einem Viertel, wenn sie am 1. Januar, April, Juli und Oktober beginnen. Sie wurde in verschiedenen Browsern getestet, einschließlich IE 6 (obwohl sie ECMAScript mit Grundfunktionen verwendet, sollte es jedoch überall funktionieren):
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);
}
Unter der Annahme, dass Januar bis März als erstes Quartal betrachtet werden (einige Länder/Unternehmen trennen ihr Geschäftsjahr von ihrem Kalenderjahr ab), sollte der folgende Code funktionieren:
var today = new Date();
var quarter = Math.floor((today.getMonth() + 3) / 3);
Das gibt Ihnen:
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
Um die verbleibenden Tage im Quartal zu erhalten, müssen Sie zunächst den ersten Tag des nächsten Quartals ermitteln und den Unterschied ermitteln.
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;
Das ist nicht getestet, aber die Theorie ist solide. Erstellen Sie im Grunde ein Datum, das dem nächsten Quartal entspricht, konvertieren Sie es und heute in Millisekunden seit dem Beginn der Epoche, dann ist die Differenz die Anzahl der Millisekunden.
Teilen Sie dies durch die Anzahl der Millisekunden an einem Tag, und Sie haben die Differenz in Tagen.
Das gibt Ihnen (zumindest ungefähr) die Anzahl der verbleibenden Tage im Quartal. Möglicherweise müssen Sie eine Feinabstimmung vornehmen, um sicherzustellen, dass alle Zeiten auf den gleichen Wert (00:00:00) eingestellt sind, sodass die Differenz in exakten Tagen liegt.
Abhängig von Ihrer tatsächlichen Definition der "verbleibenden Tage im Quartal" kann es auch um eins versetzt sein.
Aber es sollte ein guter Ausgangspunkt sein.
wenn die erste Lösung nicht funktioniert, können Sie sie einfach an den gewünschten Bereich anpassen
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;
Das hat für mich funktioniert!
var d = new Date();
quarter = Math.ceil(d.getMonth()/3);
Abhängig vom Monat
var date = new Date();
var quarter = parseInt(date.getMonth() / 3 ) + 1 ;
Abhängig vom Datum
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.
function getQuarter(d) {
return Math.floor((d.getMonth()/3 % 4) + 1);
}
Es ist nicht effizient oder lesbar, aber es hat einen Oneliner-Geschmack.
(new Date(new Date().getFullYear(), Math.floor((new Date().getMonth() + 3) / 3) * 3, 1) - new Date()) / 86400000