کداکسپلور | CodeExplore
8.24K subscribers
2.06K photos
366 videos
124 files
1.94K links
با کد اکسپلور یاد بگیر، لذت ببر و بروز باش ⚡️😉

👨🏻‍💻 ارتباط با ما :
@CodeExploreSup
گروه :
@CodeExplore_Gap

تبلیغات در کد اکسپلور :
@CodeExploreAds
Download Telegram
گاهی نیاز داریم دو بازه زمانی رو با هم مقایسه کنیم یا اختلافشون رو محاسبه کنیم. جاوااسکریپت Date داره ولی برای بازه‌ زمانی کافی نیست.

اینجا این روش رو استفاده میکنیم : ساختن یه TimeInterval با استفاده از همون Date ولی با اضافه کردن متدهای جدید💡

ایده اصلی اینه که به جای ارث‌ بری کلاس‌محور، یه تابع بنویسیم که:

- یه Date جدید میسازیم
- متدهای مورد نیازمون رو بهش اضافه میکنیم
- همون رو برمیگردونیم

var TimeInterval = function(){
var obj = new Date(0);

if(arguments.length === 1){
obj.setTime(arguments[0]);
} else if(arguments.length > 1){
var ms = (arguments[0] || 0) * 86400000 +
(arguments[1] || 0) * 3600000 +
(arguments[2] || 0) * 60000 +
(arguments[3] || 0) * 1000 +
(arguments[4] || 0);
obj.setTime(ms);
}

obj.add = function(t){
if(t.getTime){
this.setTime(this.getTime() + t.getTime());
}
};

obj.subtract = function(t){
if(t.getTime){
this.setTime(this.getTime() - t.getTime());
}
};

obj.equals = function(t){
return this.getTime() === t.getTime();
};

return obj;
}

function diff(t1, t2){
return TimeInterval(t1.getTime() - t2.getTime());
}


ساخت با پارامترهای مختلف (بدون overloading):

تابع TimeInterval می‌تونه ورودی‌های مختلف قبول کنه:

TimeInterval(3600000)           // 1 ساعت به میلی‌ثانیه
TimeInterval(1,0,0) // 1 ساعت (ساعت، دقیقه، ثانیه)
TimeInterval(1,2,0,0) // 1 روز و 2 ساعت
TimeInterval(1,2,0,0,500) // 1 روز و 2 ساعت و 500 میلی‌ثانیه

با چک کردن arguments.length می‌فهمیم کاربر چه چیزی داده.

اینو هم برای نمایش خروجی (override کردن toString) به تابع TimeIntervalاضافه میکنیم:

obj.toString = function(){
var days = Math.floor(this.getTime() / 86400000);
return days + " Day(s) " +
this.getUTCHours() + ":" +
this.getUTCMinutes() + ":" +
this.getUTCSeconds();
}


مثال از استفاده:
var interval1 = TimeInterval(1, 2, 30, 0, 500); // 1 روز, 2 ساعت, 30 دقیقه, 500 میلی‌ثانیه

var interval2 = TimeInterval(3600000 * 25); // 25 ساعت (معادل 1 روز و 1 ساعت)

interval1.add(interval2);

var difference = diff(interval1, interval2); // 1 Day(s) 2:30:0

توی این روش TimeInterval از Date ارث بری نکرده. اومدیم یه Date ساختیم، بعد متدهای جدید روش ریختیم. این روش رو توی جاوااسکریپت بهش میگن Object Augmentation و خیلی تمیز کار میکنه.

اگه توی پروژه‌ هاتون نیاز به جمع و تفریق زمان یا محاسبه اختلاف بازه های زمانی دارین، این روش هم سادست هم انعطاف‌پذیره، نیازی به هیچی نداره و خود جاوااسکریپت با یه کم خلاقیت جواب میده.


#js #timeinterval
☕️ Telegram | Website | Discord
❤‍🔥103🔥2