Wie kann ich mit Javascript das aktuelle Quartal abrufen, in dem wir uns befinden? Ich versuche herauszufinden, in welchem Quartal wir uns gerade befinden, z. B. 2.
BEARBEITEN Und wie kann ich die Anzahl der verbleibenden Tage im Quartal zählen?
John Doe
Wie kann ich mit Javascript das aktuelle Quartal abrufen, in dem wir uns befinden? Ich versuche herauszufinden, in welchem Quartal wir uns gerade befinden, z. B. 2.
BEARBEITEN Und wie kann ich die Anzahl der verbleibenden Tage im Quartal zählen?
paxdiablo
Unter der Annahme, dass Januar bis März als Q1 gelten (einige Länder/Unternehmen trennen ihr Geschäftsjahr von ihrem Kalenderjahr), 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 ermitteln, müssen Sie im Grunde den ersten Tag des nächsten Quartals ermitteln und die Differenz berechnen, etwa so:
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 ungetestet, 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 Beginn der Epoche, dann ist die Differenz die Anzahl der Millisekunden.
Teilen Sie das 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 alles vorhanden ist mal werden auf den gleichen Wert (00:00:00) gesetzt, sodass die Differenz in genauen Tagen liegt.
Es kann auch um eins abweichen, abhängig von Ihrer tatsächlichen Definition von “verbleibende Tage im Quartal”.
Aber es sollte ein guter Ausgangspunkt sein.
Angesichts der Tatsache, dass das OP davon ausgeht, dass August in Q2 liegt, ist es unwahrscheinlich, dass Januar bis März Q1 ist. Eine fest codierte Lösung funktioniert jedoch.
– RobG
16. August 2012 um 6:36 Uhr
@Rob, ich habe das Beispiel 2 als nur ein Viertel von uns gesehen könnte be in. Ich glaube nicht, dass das OP angibt, dass es dem aktuellen Monat entspricht, in dem diese Frage gestellt wurde (August).
– paxdiablo
16. August 2012 um 6:48 Uhr
Sicherlich brauchen Sie einen Math.floor um Ihr Ergebnis herum, um das Viertel zu erhalten? Außerdem gibt es keine Variable namens “jetzt”, ich schätze, Sie wollten stattdessen “heute” verwenden?
– lee_mcmullen
16. Oktober 2013 um 8:42 Uhr
@lee_mcmullen, daher der “ungetestete” Kommentar 🙂 Herzlichen Glückwunsch, dass Sie die erste Person sind, die das abgeholt hat today/now
Fehler in über einem Jahr, haben beide Probleme basierend auf Ihren Vorschlägen behoben.
– paxdiablo
16. Oktober 2013 um 8:53 Uhr
@SteveSeeger, ich bin mir nicht sicher, wovon du da redest, das Quartal wird allein durch den Monat diktiert. Die Sommerzeit scheint hier nicht im Geringsten relevant zu sein, entweder Sie sind in einem Monat oder nicht. Vielleicht könntest du das näher erläutern?
– paxdiablo
11. August 2018 um 13:55 Uhr
RobG
Da Sie keine Kriterien angegeben haben, um zu bestimmen, in welchem Quartal „*wir uns gerade befinden“, 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 ausführbares Snippet und mit Jahreszahl:
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')}`);
Diese können Sie dann entsprechend den jeweiligen Finanz- oder Kalenderquartalen anpassen. Sie können auch Folgendes 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)];
}
Dann anders verwenden q
Arrays abhängig von der Definition des erforderlichen Quartals.
Das Folgende erhält die verbleibenden Tage in einem Quartal, wenn sie am 1. Januar, April, Juli und Oktober beginnen. Es wurde in verschiedenen Browsern getestet, einschließlich IE 6 (obwohl es überall funktionieren sollte, da es grundlegendes ECMAScript verwendet):
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);
}
$NaN
? Ich habe keine Ahnung, wie Sie das bekommen, der obige Code wurde in Firefox und IE 9 getestet, es ist einfaches ECMAScript, hat also nichts mit jQuery zu tun. All dies sollte in fast jedem Browser funktionieren, der jemals Javascript unterstützt hat, sicherlich alles seit und einschließlich IE und NN 4.
– RobG
17. August 2012 um 2:29 Uhr
ja ja, es ist cool, es war ein Problem mit IE 6, und leider kann der Client, für den ich das baue, nicht “aktualisieren”, um Chrome oder so etwas zu mögen.
– John Doe
17. August 2012 um 15:59 Uhr
Ihr Beispiel daysleftInquarter ist nicht korrekt, es gibt immer wieder 60 zurück, wenn ich den aktuellen Monat passiere
– John Doe
17. August 2012 um 16:32 Uhr
@Simon_Weaver – hat ein ausführbares Snippet mit dem Jahr hinzugefügt.
– RobG
6. November 2018 um 23:03 Uhr
@Simon_Weaver – die neue Funktion kehrt zurück [y,m]
. 😉 Die Formatierung des eigentlichen Ausdrucks ist dem Benutzer überlassen, wenn Sortierbarkeit erforderlich ist, passt Jahr/Quartal. Meine Präferenz ist 2019Q1, was ziemlich ISO-mäßig ist, also scheinen die USA wahrscheinlich etwas anderes zu bevorzugen, wie Q1’19 oder Q1/19 oder ähnliches, das nicht lexikalisch sortiert wird. 🙁
– RobG
6. November 2018 um 23:51 Uhr
Wim den Herder
function getQuarter(d) {
return Math.floor(d.getMonth()/3) + 1);
}
EDIT: Ich habe %4 weggelassen, ganz richtig, danke Clement
% 4 wird nicht benötigt
– Clemens
19. Februar 2021 um 14:40 Uhr
Tom Prats
Wenn die erste Lösung nicht funktioniert, können Sie sie einfach auf den gewünschten Bereich einstellen
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;
Shih En Chou
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.
Tron
Sie können verwenden Moment Paket:
Die Antwort auf Ihre Frage mit dem Momentpaket lautet:
moment().quarter()
Nachfolgend sind die Start- und Enddaten eines Quartals mit dem Moment-Paket aufgeführt:
STARTDATUM DES QUARTALS
moment().quarter(moment().quarter()).startOf('quarter');
Würde das aktuelle Quartal zurückgeben, wobei das Datum auf das Startdatum des Quartals festgelegt ist.
moment("2019", "YYYY").quarter(4).startOf('quarter');
Würde das Startdatum des 4. Quartals des Jahres “2019” zurückgeben.
moment().startOf('quarter');
Würde das Startdatum des aktuellen Quartals des aktuellen Jahres zurückgeben.
ENDDATUM DES QUARTALS
moment().quarter(moment().quarter()).endOf('quarter');
Würde das aktuelle Quartal zurückgeben, wobei das Datum auf das Enddatum des Quartals festgelegt ist.
moment("2019", "YYYY").quarter(4).endOf('quarter');
Würde das Enddatum des 4. Quartals des Jahres “2019” zurückgeben.
moment().endOf('quarter');
Würde das Enddatum des aktuellen Quartals des aktuellen Jahres zurückgeben.
Adi
Das hat bei mir funktioniert!
var d = new Date();
var quarter = Math.ceil(d.getMonth() / 3);
console.log(quarter)
Genau das, wonach ich suche, da ich das tatsächliche Quartal haben wollte, nicht das US-Geschäftsjahr. Vielen Dank!
– Mayer Spitz
8. Februar 2019 um 15:28 Uhr
Da der Monat nullbasiert ist, müssen Sie 1 hinzufügen, damit dies richtig funktioniert. [0,1,2,3,4,5,6,7,9,10,11].map(Monat => Math.ceil(Monat/3)) === [0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4]
– Patrick McElhaney
1. Juli 2019 um 13:05 Uhr
Was sind Ihre Kriterien für Quartal? In einigen Fällen sind sie Januar bis Dezember, andere Juli bis Juni des folgenden Jahres und so weiter. Und sie stimmen möglicherweise nicht mit Monaten überein.
– RobG
16. August 2012 um 6:12 Uhr
Ungefähr ist in Ordnung, wenn es ein freier Tag ist, ist es nicht das Ende der Welt, aber wenn es einen anderen Weg gibt, das aktuelle Quartal zu erhalten, ohne vom Monat abhängig zu sein, wäre das ideal.
– John Doe
16. August 2012 um 6:14 Uhr
Dies kann Ihnen helfen [Stack answer with fiddle][1] [1]: stackoverflow.com/a/20989200/2837412
– Nishchit
8. Januar 2014 um 7:17 Uhr