2013-05-03 20 views
42
function leapYear(year){ 
    var result; 
    year = parseInt(document.getElementById("isYear").value); 
    if (years/400){ 
     result = true 
    } 
    else if(years/100){ 
     result = false 
    } 
    else if(years/4){ 
     result= true 
    } 
    else{ 
     result= false 
    } 
    return result 
} 

Questo è quello che ho finora (l'entrata è su una da così memorizzato in "isYear"), ho praticamente seguito questa here, in modo da utilizzare quello che ho già, come posso controllare se la voce è un anno bisestile sulla base di queste condizioni (nota forse ho fatto male in sede di attuazione del pseudocodice, per favore correggetemi se ho) Edit: Nota questo deve utilizzare una funzione data non interoControllare se l'anno è bisestile in javascript

+1

controllo @ http://stackoverflow.com/questions/8175521/javascript-to-find-leap-year – swetha

+1

Il fatto è che ho bisogno di far fronte a questo, come se sto lavorando con solo l'anno dirlo 2014 come non integer un valore di data – BigBob

risposta

109
function leapYear(year) 
{ 
    return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); 
} 
+0

contento di aver potuto aiutare. Si può semplicemente utilizzare '((anno% 4 == 0) && (anno 100%! = 0)) || (anno% 400 == 0) 'dove ne hai bisogno se non vuoi una funzione. Trovo comunque utili le funzioni per avere un buon codice leggibile dall'uomo. – MMeersseman

+0

ho già fatto come da istruzioni, ma grazie per il consiglio. Mi piacerebbe utilizzare più funzioni, tuttavia non sono autorizzato ad aggiungere funzioni aggiuntive. Abbastanza restrittivo e rendendo fastidiosi alcuni altri calcoli, ma gestendo. – BigBob

+1

FYI: Questo sembra essere molto più performante di 'isLeap' (sotto) - http://jsfiddle.net/atwright147/7dqzvzpr/ – atwright147

-7

puoi provare a utilizzare JavaScript Object Data

new Date(year,month).getFullYear()%4==0 

Ciò restituirà vero o falso.

+6

Non gestisce casi speciali (divisibilità per 100 e 400). – Pif

0

È possibile utilizzare il seguente codice per verificare se si tratta di un anno bisestile:

ily = function(yr) { 
    return (yr % 400) ? ((yr % 100) ? ((yr % 4) ? false : true) : false) : true; 
} 
+1

Potresti elaborare un po '? – tsnorri

+2

Questo sembra solo un refactoring della risposta accettata. Non è più compatto o esegue operazioni diverse, quindi non sono sicuro di quale valore aggiungerebbe. –

+5

questo è praticamente molestare l'operatore ternario –

3

Se stai facendo questo in un app Node.js, è possibile utilizzare il pacchetto leap-year:

npm install --save leap-year 

Poi dalla tua app, utilizzare il seguente codice per verificare se l'anno o la data oggetto fornito è un anno bisestile:

var leapYear = require('leap-year'); 

leapYear(2014); 
//=> false 

leapYear(2016); 
//=> true 

utilizzando una libreria come questo ha il vantaggio che non si ha a che fare con i dettagli sporchi di ottenere tutti i casi particolari di destra, dal momento che la biblioteca si occupa di questo.

-5

il mio codice è molto facile da capire

var year = 2015; 
var LeapYear = year % 4; 

if (LeapYear==0) { 
    alert("This is Leap Year"); 
} else { 
    alert("This is not leap year"); 
} 
+3

Il tuo codice non è corretto. Il 1900 non fu un anno bisestile, ma il tuo codice dirà che lo è stato. – duskwuff

10

La funzione controlla se Febbraio ha 29 giorni. se lo fa, allora abbiamo un anno bisestile.

function isLeap(year) { 
    return new Date(year, 1, 29).getDate() === 29; 
    } 
+5

Mi piace davvero questa soluzione, perché non richiede alcuna conoscenza di base del calendario gregoriano. –

2

una soluzione più veloce è fornita da Kevin P. Rice qui: https://stackoverflow.com/a/11595914/5535820 Quindi, ecco il codice:

function leapYear(year) 
{ 
    return (year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0); 
} 
+0

Questo è più conciso: '! (Y & 3 || y & 15 &&! (Y% 25))' –

0

È possibile utilizzare isLeap o yearType funzioni per determinare il tipo all'anno.

var date = require('aleppo') 
// ... 
date.yearType(2000) // leap 
date.isLeap(2000) // true