Bilgisayar terimleriyle new Date()
ve regular expression
çözümler yavaş! Süper hızlı (ve süper şifreli) bir astar istiyorsanız, bunu deneyin ( formatta m
olduğu varsayılarak Jan=1
). En iyi performansı elde etmek için farklı kod değişikliklerini denemeye devam ediyorum.
Şu anki en hızlı sürümüm:
Bu ilgili soruyu inceledikten sonra Bitsel operatörleri (inanılmaz hız) kullanarak yıl kontrolü yapın ve 25 ve 15 sihirli sayısının neyi temsil ettiğini keşfettikten sonra, bu optimize edilmiş cevaplar meleziyle karşılaştım:
function getDaysInMonth(m, y) {
return m===2 ? y & 3 || !(y%25) && y & 15 ? 28 : 29 : 30 + (m+(m>>3)&1);
}
Bit değişimi göz önüne alındığında, bu açıkça m
& y
parametrelerinizin her ikisi de tamsayı olduğunu varsayar , çünkü sayıları dize olarak geçirmek garip sonuçlara neden olur.
JSFiddle: http://jsfiddle.net/TrueBlueAussie/H89X3/22/
JSPerf sonuçları: http://jsperf.com/days-in-month-head-to-head/5
Nedense, (m+(m>>3)&1)
daha etkilidir (5546>>m&1)
üzerinde neredeyse tüm tarayıcılar.
Hız için tek gerçek rekabet @GitaarLab'dan, bu yüzden test etmemiz için kafa kafaya bir JSPerf oluşturdum: http://jsperf.com/days-in-month-head-to-head/5
Bu benim artık yıl cevap dayalı çalışır: javascript artık yıl bulmak için bu cevap burada Bitwise operatörleri (şaşırtıcı hız) yanı sıra aşağıdaki ikili mantık kullanarak yıl kontrol edin .
İkili aylarda hızlı bir ders:
İstediğiniz ayların dizinini (Ocak = 1) ikili olarak yorumlarsanız , 31 günlük ayların ya bit 3 temiz ve 0 biti ayarlanmış ya da bit 3 set ve 0 biti temiz olduğunu fark edeceksiniz.
Jan = 1 = 0001 : 31 days
Feb = 2 = 0010
Mar = 3 = 0011 : 31 days
Apr = 4 = 0100
May = 5 = 0101 : 31 days
Jun = 6 = 0110
Jul = 7 = 0111 : 31 days
Aug = 8 = 1000 : 31 days
Sep = 9 = 1001
Oct = 10 = 1010 : 31 days
Nov = 11 = 1011
Dec = 12 = 1100 : 31 days
Araçlarla Yani değeri 3 ile yer kayabilir >> 3
orjinali ile, XOR bit ^ m
ve sonuç olup olmadığını görmek 1
veya 0
bit 0 konumunda kullanarak & 1
. Not: Görünen o ki +
XOR ( ^
) ' dan biraz daha hızlıdır ve (m >> 3) + m
aynı sonucu bit 0'da verir.
JSPerf sonuçları : http://jsperf.com/days-in-month-perf-test/6