Moment.js: তারিখের মধ্যে তারিখ


118

আমি প্রদত্ত তারিখ দুটি তারিখের মধ্যে থাকলে মোমেন্ট.জেএস এর সাথে সনাক্ত করার চেষ্টা করছি। সংস্করণ ২.০.০ থেকে, টিম যুক্ত isBefore()এবং isAfter()তারিখের তুলনায়।

যেহেতু কোনও isBetween()পদ্ধতি নেই, তাই আমি ভেবেছিলাম এটি কাজ করবে:

var date = moment("15/02/2013", "DD/MM/YYYY");
var startDate = moment("12/01/2013", "DD/MM/YYYY");
var endDate = moment("15/01/2013", "DD/MM/YYYY");

if (date.isBefore(endDate) && date.isAfter(startDate) || (date.isSame(startDate) || date.isSame(endDate)) ) { alert("Yay!"); } else { alert("Nay! :("); }

আমি নিশ্চিত যে এটি করার আরও ভাল উপায় হতে পারে। কোন ধারনা?


আমি বিশ্বাস করি আপনি চেয়েছিলেন ? isBetween || isStart || isEnd
বার্গি

হ্যাঁ, সেখানে টাইপো, দুঃখিত!
জোয়েল এ ভিলারিয়াল বার্টল্ডি

উত্তর:


82

তারিখের সীমাটি মোকাবেলায় আপনি মুহূর্তের একটি প্লাগইন -> মুহুর্তের ব্যাপ্তি ব্যবহার করতে পারেন :

var startDate = new Date(2013, 1, 12)
  , endDate   = new Date(2013, 1, 15)
  , date  = new Date(2013, 2, 15)
  , range = moment().range(startDate, endDate);

range.contains(date); // false

1
আপনি প্লাগইনটি কীভাবে অন্তর্ভুক্ত করবেন?

2
আপনার মুহুর্তের পরে কেবল <স্ক্রিপ্ট src = "/ জাভাস্ক্রিপ্টস / মুহুর্ত-রেঞ্জ.js"> </script> অন্তর্ভুক্ত করা উচিত
লুকাসজ কোজিয়ারা

53
তারিখ.ইস বিটুইন (স্টার্টেট, শেষ তারিখ); অনেক সহজ এবং অতিরিক্ত প্লাগইন প্রয়োজন এড়ানো।
ব্রেন্ডন নী

মুহুর্ত এবং মুহুর্ত-সীমা রেঞ্জগুলি প্রস্তুত করার সময় তারিখের সময় ফর্ম্যাট করার বিকল্প সরবরাহ করে এবং তারপরে অন্তর্ভুক্ত / ওভারল্যাপগুলি / ছেদগুলি / ছেদ করুন / যোগ / বিয়োগের তারিখগুলির তুলনা করুন। যদি কারও কিছু বিশেষ বিন্যাসে তারিখগুলি পুনরুদ্ধার করে, তবে একজন সেই তারিখগুলিকে প্রয়োজনীয় বিন্যাসে রূপান্তর করে অ্যারের অভ্যন্তরে তারিখের রেঞ্জ প্রস্তুত করতে সক্ষম হয় এবং তারপরে আমরা তুলনা করতে পারি।
সাজ্জাদ আলি খান

277

ইন সংস্করণ 2.9+ একটি আছে isBetweenফাংশন, কিন্তু এটি একচেটিয়া আছে:

var compareDate = moment("15/02/2013", "DD/MM/YYYY");
var startDate   = moment("12/01/2013", "DD/MM/YYYY");
var endDate     = moment("15/01/2013", "DD/MM/YYYY");

// omitting the optional third parameter, 'units'
compareDate.isBetween(startDate, endDate); //false in this case

একটি অন্তর্ভুক্তিমূলক কাজ আছে ...
x.isBetween(a, b) || x.isSame(a) || x.isSame(b)

... যা যৌক্তিকভাবে সমতুল্য
!(x.isBefore(a) || x.isAfter(b))


ইন সংস্করণ 2.13isBetween ফাংশন, একটি চতুর্থ ঐচ্ছিক প্যারামিটার রয়েছে inclusivity

এটি এর মতো ব্যবহার করুন:

target.isBetween(start, finish, 'days', '()') // default exclusive
target.isBetween(start, finish, 'days', '(]') // right inclusive
target.isBetween(start, finish, 'days', '[)') // left inclusive
target.isBetween(start, finish, 'days', '[]') // all inclusive

বিবেচনা করার জন্য আরও ইউনিট: years, months, days, hours, minutes, seconds, milliseconds

দ্রষ্টব্য: ইউনিটগুলি এখনও .চ্ছিক। nullইউনিটগুলিকে অগ্রাহ্য করার জন্য তৃতীয় যুক্তি হিসাবে ব্যবহার করুন যেখানে মিলিসেকেন্ডগুলি ডিফল্ট গ্রানুলারিটি।

অফিসিয়াল ডক্স দেখুন


3
মনে রাখবেন যে, ডক্সে যেমন বলা হয়েছে, এটিই হল একচেটিয়া
এল।

x.isBetween(moment(a).subtract(1, 'day'), b)কৌশলটিও মনে হয়।
জেমস ডোনেলি

@ থিসক্লার্ক এটি একটি ভাল কাজ; : আমি তার চেয়ে কম ফাংশন কলের মাধ্যমে অন্য এক পরামর্শ দিয়ে থাকি!(x.isBefore(a) || x.isAfter(b))
tavnab

কী exclusiveমানে?
ব্যাটম্যান

2
@ ব্যাটম্যান 1,2,3,4,5 তালিকাটি বিবেচনা করুন। একচেটিয়াভাবে, 1 এবং 5 এই তালিকার মানগুলির মধ্যে নয়। সামগ্রিকভাবে, 1 এবং 5 এই তালিকার মানগুলির মধ্যে রয়েছে। বাম ইনক্লুসিভ (ডান এক্সক্লুসিভ হিসাবে একই) এর মধ্যে ১ টি অন্তর্ভুক্ত রয়েছে তবে ৫ টি নয়। ডান ইনক্লুসিভ (বাম এক্সক্লুসিভ হিসাবে একই) অন্তর্ভুক্ত রয়েছে ৫ টি, তবে ১ টি নয়
ক্লার্ক

27

তুমি ব্যবহার করতে পার

moment().isSameOrBefore(Moment|String|Number|Date|Array);
moment().isSameOrAfter(Moment|String|Number|Date|Array);

অথবা

moment().isBetween(moment-like, moment-like);

এখানে দেখুন: http://momentjs.com/docs/#/query/


2
দ্রুত দ্রষ্টব্য: isBetween2.13.0 মুহুর্তের প্রয়োজন। momentjs.com/docs/#/query/is-between
অ্যালেক্স জনসন

16

আমি এটা বিশ্বাস করি না

if (startDate <= date && date <= endDate) {
  alert("Yay");
} else {
  alert("Nay! :("); 
}

খুব কাজ করে ...


এই গণনা সর্বদা বছর উপেক্ষা করে। উদাহরণস্বরূপ, আমি যদি শুরুর তারিখ = '05 -01-2019 ', শেষ তারিখ = '05 -31-2019' এবং তারিখ '05 -21-2017 'হিসাবে দিই, তবে এটি আমাকে "ইয়ে" হিসাবে ফলাফল দেবে, যদিও এটি মিথ্যা ।
আকাশ

1
@ আকাশমৌর্য আপনি তারিখের চেয়ে স্ট্রিংয়ের সাথে তুলনা করছেন। নিশ্চিত হয়ে নিন যে আপনি আপনার স্টার্টেট / শেষ তারিখটিকে স্টার্টডেট = নতুন তারিখ ("05-01-2019") হিসাবে সংজ্ঞায়িত করেছেন।
টিলে ডিক্লেয়ার্কিউ

13

সবার জন্য সুসংবাদ, একটি isBetweenঅনুষ্ঠান আছে! আপনার লাইব্রেরি আপডেট করুন;)

http://momentjs.com/docs/#/query/is-between/


2
সত্য তবে isBetweenঅন্তর্ভুক্ত নয়
এপোক আট

4
সংস্করণ 2.13.0 এক্সক্লুসিভিটি পরিচয় করিয়ে দেয়। এ [একটি মান অন্তর্ভুক্তির ইঙ্গিত দেয়। এ (বর্জন ইঙ্গিত inclusivity প্যারামিটার ব্যবহার করা হয় তাহলে উভয় সূচক হস্তান্তর করা উচিত moment('2016-10-30').isBetween('2016-10-30', '2016-10-30', null, '[]'); //true
Ramratan গুপ্ত

8

অনুগ্রহ করে মুহুর্তের চতুর্থ প্যারামিটার ব্যবহার করুন isআর মধ্যে ফাংশন (অন্তর্ভুক্তি)। উদাহরণ:

var startDate = moment("15/02/2013", "DD/MM/YYYY");
var endDate = moment("20/02/2013", "DD/MM/YYYY");

var testDate = moment("15/02/2013", "DD/MM/YYYY");

testDate.isBetween(startDate, endDate, 'days', true); // will return true
testDate.isBetween(startDate, endDate, 'days', false); // will return false

5
if (date.isBefore(endDate) 
 && date.isAfter(startDate) 
 || (date.isSame(startDate) || date.isSame(endDate))

যৌক্তিকভাবে একই

if (!(date.isBefore(startDate) || date.isAfter(endDate)))

যা আপনাকে কয়েক লাইনের কোড এবং (কিছু ক্ষেত্রে) পদ্ধতির কলগুলিকে বাঁচায়।

আপনি কেবল একবার বা দু'বার এটি করতে চাইলে পুরো প্লাগইনে টান দেওয়ার চেয়ে সহজ হতে পারে।


1

মুহুর্তের জেসের নথি হিসাবে

রব ডসনের লিখিত যথার্থ ব্যাপ্তি প্লাগইন রয়েছে, তারিখ / সময় সীমাগুলির সঠিক, মানব-পঠনযোগ্য উপস্থাপনা, ইউআরএল প্রদর্শন করতে ব্যবহার করা যেতে পারে: http://codebox.org.uk/pages/moment-date-range-plugin

moment("2014-01-01 12:00:00").preciseDiff("2015-03-04 16:05:06");
// 1 year 2 months 3 days 4 hours 5 minutes 6 seconds

moment.preciseDiff("2014-01-01 12:00:00", "2014-04-20 12:00:00");
// 3 months 19 days
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.