javascript zu finden Schaltjahr
Wie bekomme ich den code unten, um zu arbeiten, wenn ich im Monat Februar? Derzeit ist es immer auf den Tag und dann stoppen, bevor man an die ob, um zu bestimmen, ob es sich um ein Schaltjahr.
if (month == 2) {
if (day == 29) {
if (year % 4 != 0 || year % 100 == 0 && year % 400 != 0) {
field.focus();
field.value = month +'/' + '';
}
}
else if (day > 28) {
field.focus();
field.value = month +'/' + '';
}
}
InformationsquelleAutor der Frage Juan Almonte | 2011-11-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist sicherer, zu verwenden Von Date-Objekten für datetime-Sachen, z.B.
Da die Leute immer Fragen wie genau dieser funktioniert, es hat damit zu tun, wie JS berechnet den Datumswert aus Jahr-Monat-Tag (details hier). Grundsätzlich zuerst berechnet der erste des Monats und fügt dann N -1 Tage. Also, wenn wir gefragt haben für den 29. Feb auf einem nicht-Schaltjahr, wird das Ergebnis der 1. Feb + 28 Tage = 1. März:
Auf ein Schaltjahr, der 1 + 28 = 29. Feb:
Im code oben, habe ich das Datum auf den 29. Feb und schauen, ob ein roll-over statt. Wenn nicht (der Monat ist immer noch 1, also Februar), dies ist ein Schaltjahr, ansonsten wird ein nicht-Schaltjahr.
InformationsquelleAutor der Antwort georg
Im Vergleich zu
new Date()
dies ist etwa 100 mal schneller!Update:
Diese neueste version verwendet ein bisschen test der unteren 3 bit (ist es ein Vielfaches von 4 sein), sowie einen Scheck für das Jahr als ein Vielfaches von 16 (untere 4 bits in der binären ist 15) und einem vielfachen von 25.
http://jsperf.com/ily/15
Ist es leicht wieder schneller als meine Vorherige version (unten):
http://jsperf.com/ily/7
Es ist auch 5% schneller, im Vergleich zu den schon fast Bedingungsoperator version von broc.seib
Speed-Test Ergebnisse: http://jsperf.com/ily/6
Erwartet, Logik-test-Ergebnisse:
InformationsquelleAutor der Antwort Gone Coding
Korrekte und Schnelle:
Wenn Sie in einer Schleife oder zählen die Nanosekunden, dies ist zwei Größenordnungen schneller als laufen Sie Ihr Jahr durch ein neues Date() Objekt. Vergleichen Sie die performance hier: http://jsperf.com/ily
InformationsquelleAutor der Antwort broc.seib
...Subtraktion von eins soll noch schneller arbeiten als vergleichen auf den meisten CPU-Architekturen.
InformationsquelleAutor der Antwort bofs
Bessere historische Berechnung von Schaltjahren.
Den code unten berücksichtigt wird, dass die Schaltjahre eingeführt wurden 45BC mit dem julianischen Kalender, und dass die Mehrheit der westlichen Welt nahm den Gregorianischen Kalender im 1582CE, und dass 0CE = 1BC.
Großbritannien und seine Kolonien nahm den Gregorianischen Kalender im Jahre 1752, also, wenn Sie mehr Anglo-centric diese version ist besser (Wir gehen davon aus, dass Großbritannien angenommen, der Julianische Kalender mit römischen Eroberung ab 43CE).
InformationsquelleAutor der Antwort spirographer
Ich dieses, weil ich hasse es zu halten, unter Bezugnahme auf Januar als 0 und Februar 1.
Zu mir und PHP und lesbar, Termine, Februar=2. Ich weiß es nicht wirklich Materie, als die Zahl ändert sich nie, aber es hält nur mein Gehirn denken das gleiche über unterschiedliche Codes.
InformationsquelleAutor der Antwort Adam