Ich habe diese Funktion verwendet, möchte aber wissen, wie dies am effizientesten und genauesten funktioniert.
function daysInMonth(iMonth, iYear) {
return 32 - new Date(iYear, iMonth, 32).getDate();
}
javascript
date
Chatu
quelle
quelle
return new Date(year, month + 1, 0).getDate();
var d=new Date();d.setFullYear(year, month, date);
.month
ist 12 ? Sollte derDate
Konstruktor nicht einen Wert von 0 bis 11 annehmen ?Wenn Sie diese Funktion häufig aufrufen, kann es hilfreich sein, den Wert für eine bessere Leistung zwischenzuspeichern.
Hier ist die Caching-Version der Antwort von FlySwat :
quelle
Date
(daher gibt es keine universelle Antwort auf diese Frage) und davon, wie oft Ihr Code diedayInMonth
mit denselben Werten aufruft . Die einzig sinnvolle Antwort lautet also: Profilieren Sie Ihren Code und vergleichen Sie ihn!cache
, verwende ichlocalStorage
.Einige Antworten (auch auf andere Fragen) hatten Schaltjahrprobleme oder verwendeten das Date-Objekt. Obwohl Javascript
Date object
auf beiden Seiten des 1. Januar 1970 ungefähr 285616 Jahre (100.000.000 Tage) abdeckt, hatte ich genug von allen Arten unerwarteter Datumsinkonsistenzen in verschiedenen Browsern (insbesondere Jahr 0 bis 99). Ich war auch neugierig, wie man es berechnet.Also habe ich einen einfachen und vor allem kleinen Algorithmus geschrieben, um die korrekte ( Proleptic Gregorian / Astronomical / ISO 8601: 2004 ( Abschnitt 4.3.2.1), also Jahr
0
existiert und ist ein Schaltjahr und negative Jahre werden unterstützt ) Anzahl der Tage für einen bestimmten Monat und ein bestimmtes Jahr.Es verwendet den Kurzschluss-Bitmasken-Modulo-Schaltjahr-Algorithmus (leicht modifiziert für js) und den üblichen Mod-8-Monats-Algorithmus.
Beachten Sie, dass in der
AD/BC
Notation das Jahr 0 AD / BC nicht existiert: Stattdessen1 BC
ist das Jahr das Schaltjahr!WENN Sie die BC-Notation berücksichtigen müssen, subtrahieren Sie einfach zuerst ein Jahr vom (ansonsten positiven) Jahreswert !! (Oder subtrahieren Sie das Jahr von
1
für weitere Jahresberechnungen.)Beachten Sie, dass Monate 1-basiert sein müssen!
Beachten Sie, dass dies ein anderer Algorithmus ist als die Suche nach magischen Zahlen, die ich in meinem Javascript verwendet habe, um den Tag des Jahres (1 - 366) zu berechnen , da hier der zusätzliche Zweig für das Schaltjahr nur für Februar benötigt wird.
quelle
Um Verwirrung zu vermeiden, würde ich wahrscheinlich die Monatszeichenfolge basierend machen, da sie derzeit auf 1 basiert.
quelle
Mit moment.js können Sie die daysInMonth () -Methode verwenden:
quelle
Hier geht es
quelle
ES6-Syntax
kehrt zurück
quelle
quelle
In Anbetracht der Schaltjahre:
quelle
Einzeilige direkte Berechnung (kein Datumsobjekt):
Variation mit 0-basierten Monaten:
quelle
Wenn Sie die Anzahl der Tage im aktuellen Monat eines Datumsobjekts angeben möchten, ziehen Sie die folgende Methode in Betracht:
Dann können Sie es so ausführen:
quelle
In einer einzigen Zeile:
quelle
Kann im Vergleich zur ausgewählten Antwort etwas übertrieben sein :) Aber hier ist es:
Ich habe den obigen Code hier gefunden: https://github.com/ElemeFE/element/blob/dev/src/utils/date-util.js
Ich habe den obigen Code hier gefunden: https://github.com/datejs/Datejs/blob/master/src/core.js
quelle
Wenn Sie eine Datumsvariable übergeben, kann dies hilfreich sein
quelle
Vielleicht nicht die eleganteste Lösung, aber leicht zu verstehen und zu warten; und es ist kampferprobt.
quelle