কম্পিউটারের পদগুলিতে, new Date()
এবং regular expression
সমাধানগুলি ধীর! আপনি যদি একটি সুপার-ফাস্ট (এবং সুপার ক্রিপ্টিক) ওয়ান-লাইনার চান, তবে এটি ব্যবহার করে দেখুন (ধরে নিচ্ছেন m
যে Jan=1
ফর্ম্যাটে রয়েছে)। আমি সেরা পারফরম্যান্স পেতে বিভিন্ন কোড পরিবর্তন চেষ্টা করে চলেছি।
আমার বর্তমানের দ্রুততম সংস্করণ:
এই সম্পর্কিত প্রশ্নটি দেখার পরে লিপ ইয়ার চেক বিটওয়াইস অপারেটরগুলি (আশ্চর্যজনক গতি) ব্যবহার করে এবং 25 এবং 15 ম্যাজিক নম্বরটি কী উপস্থাপন করে তা আবিষ্কার করার পরে, আমি উত্তরগুলির এই অনুকূলিতকরণ সংকর নিয়ে এসেছি:
function getDaysInMonth(m, y) {
return m===2 ? y & 3 || !(y%25) && y & 15 ? 28 : 29 : 30 + (m+(m>>3)&1);
}
বিট-শিফটিংয়ের ফলে এটিকে স্পষ্টতই ধরে নেওয়া যায় যে আপনার m
ও y
প্যারামিটারগুলি উভয়ই পূর্ণসংখ্যা, কারণ স্ট্রিং হিসাবে সংখ্যাগুলি পাস করার ফলে অদ্ভুত ফলাফল হতে পারে।
জেএসফিডাল: http://jsfiddle.net/TrueBlueAussie/H89X3/22/
জেএসপিফারফের ফলাফল: http://jsperf.com/days-in-month-head-to-head/5
কিছু কারণে, (m+(m>>3)&1)
অধিক কার্যকরী হয় (5546>>m&1)
উপর প্রায় সমস্ত ব্রাউজার।
গতির একমাত্র আসল প্রতিযোগিতাটি হ'ল @ গীতারল্যাব থেকে, সুতরাং আমি আমাদের পরীক্ষার জন্য মাথা থেকে মাথা JSPerf তৈরি করেছি: http://jsperf.com/days-in-month-head-to-head/5
এটি আমার লিপ বছরের উত্তরের উপর ভিত্তি করে এখানে কাজ করে: জাভাস্ক্রিপ্ট লিপ ইয়ারটি এই উত্তরটি সন্ধান করতে এখানে লিপ ইয়ার বিটওয়াইজ অপারেটর (আশ্চর্যজনক গতি) এবং নীচের বাইনারি যুক্তি ব্যবহার করে পরীক্ষা করুন ।
বাইনারি মাসগুলিতে একটি দ্রুত পাঠ:
আপনি যদি বাইনারিটিতে পছন্দসই মাসগুলির (জানুয়ারী = 1) সূচকটি ব্যাখ্যা করেন তবে আপনি খেয়াল করতে পারেন যে 31 দিনের সাথে কয়েক মাসের মধ্যে বিট 3 ক্লিয়ার এবং বিট 0 সেট, বা বিট 3 সেট এবং বিট 0 ক্লিয়ার রয়েছে।
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
এর অর্থ আপনি >> 3
মূলটির সাথে 3 টির সাথে মানটি স্থান পরিবর্তন করতে পারবেন , মূলটির সাথে বিটগুলি এক্সওর করুন ^ m
এবং ফলাফলটি ব্যবহার করে 1
বা 0
বিট পজিশনে 0 ব্যবহার করে দেখুন কিনা & 1
। দ্রষ্টব্য: এটি দেখা যাচ্ছে +
XOR ( ^
) এর চেয়ে কিছুটা দ্রুত এবং (m >> 3) + m
বিট 0-তে একই ফলাফল দেয়।
জেএসপিফারফের ফলাফল : http://jsperf.com/days-in-month-perf-test/6