TGViewer
کداکسپلور | CodeExplore کداکسپلور | CodeExplore @codeexplore · 9.19K subscribers
Post #4486 2.2K
⏰ گاهی نیاز داریم دو بازه زمانی رو با هم مقایسه کنیم یا اختلافشون رو محاسبه کنیم. جاوااسکریپت 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
  • ❤‍🔥 10
  • ⚡ 3
  • 🔥 2
More from @codeexplore
  1. Oct 3, 2026♨️گیت هاب قابلیت Computer Use رو به‌صورت Public Preview به GitHub Copilot CLI و اپ Copilot…
  2. Oct 3, 2026🤨🧐 #fun ☕️ Telegram | Website | Discord
  3. Oct 3, 2026پایتون 3.15 منتشر شد🎉 البته 1.5 روز تاخیر توی انتشار داشت ولی خب از امروز قابل دسترسه. #p…
  4. Oct 2, 2026وقتی OpenAI آپدیت جدید میده: #fun #chatgpt ☕️ Telegram | Website | Discord
  5. Oct 2, 2026✨ اکانت ChatGPT Plus پیش‌ساخته یک ماهه، کاملاً اختصاصی🔐 ‌ ✅ ۱۰ روز گارانتی بی‌قید و شرط ‌…
  6. Oct 2, 2026Post #4841
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →