জাভাস্ক্রিপ্টে দুটি তারিখের মধ্যে মাসের মধ্যে পার্থক্য


135

আমি কীভাবে জাভাস্ক্রিপ্টে দুটি তারিখ () অবজেক্টের জন্য পার্থক্যটি কাজ করব, যখন কেবলমাত্র পার্থক্যের মাসের সংখ্যাটি ফিরিয়ে দেব?

যেকোনো সাহায্যই অসাধারণ :)


একটি মাস পরিমাপের খুব সঠিক একক নয় কারণ কোন মাসের উপর নির্ভর করে মাসের দৈর্ঘ্য পরিবর্তিত হয়। যদি কোনও বিরতি জানুয়ারি থেকে ফেব্রুয়ারির মধ্যে 30 দিন স্থায়ী হয় তবে আপনি যদি 31 দিনের মাস বিবেচনা করেন তবে 1 মাসেরও কম, তবে আপনি ফেব্রুয়ারির ২৮ বা ২৯ দিন বিবেচনা করলে 1 মাসেরও বেশি।
মার্ক বাইয়ার্স

7
খুব ভাল সংজ্ঞায়িত প্রশ্ন নয়। 28 ফেব্রুয়ারী 23:58 থেকে মার্চ 1 00:01 এক মাস? নাকি মাত্র একদিন? নাকি মাত্র তিন মিনিট? নাকি তিনটি?
থিলো

1
@ থিলো কারও কারও এটি বাস্তবায়নের প্রয়োজনের উত্তর সম্ভবত নেই, কারণ তাদের পরিচালকের কোনও ধারণা নেই যে তারা প্রথম স্থানে কী জিজ্ঞাসা করছেন। :)
AlbertEngelB

উত্তর:


228

"পার্থক্যের মাসে সংখ্যা" এর সংজ্ঞাটি প্রচুর ব্যাখ্যার সাপেক্ষে। :-)

আপনি একটি জাভাস্ক্রিপ্ট তারিখ অবজেক্ট থেকে বছর, মাস এবং মাসের দিন পেতে পারেন। আপনি কোন তথ্যটি অনুসন্ধান করছেন তার উপর নির্ভর করে আপনি সময়সীমার মধ্যে দুটি পয়েন্টের মধ্যে কত মাস রয়েছে তা নির্ধারণ করতে আপনি সেগুলি ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, অফ-কফ:

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth();
    months += d2.getMonth();
    return months <= 0 ? 0 : months;
}

(নোট করুন যে জাভাস্ক্রিপ্টে মাসের মানগুলি 0 = জানুয়ারির সাথে শুরু হয়))

উপরের অংশের ভগ্নাংশগুলি সহ আরও জটিল, কারণ সাধারণত ফেব্রুয়ারিতে তিন দিন আগস্টের (than 9.677%) তিন দিনের তুলনায় সেই মাসের (~ 10.714%) বৃহত্তর ভগ্নাংশ হয় এবং অবশ্যই ফেব্রুয়ারীও একটি চলন্ত লক্ষ্য is এটি লিপ বছর কিনা তার উপর নির্ভর করে।

জাভাস্ক্রিপ্টের জন্য কিছু তারিখ এবং সময় গ্রন্থাগার রয়েছে যা সম্ভবত এই ধরণের জিনিসটিকে সহজ করে তোলে।


দ্রষ্টব্য : উপরোক্তগুলিতে একটি ব্যবহৃত হত + 1, এখানে:

months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth() + 1;
// −−−−−−−−−−−−−−−−−−−−^^^^
months += d2.getMonth();

মূল কারণ আমি বলেছিলাম কারণ:

... এটি আংশিক মাস গণনা না করে, পুরো তারিখের মধ্যে কতগুলি পুরো মাস থাকে তা জানতে পারে (উদাহরণস্বরূপ, প্রতিটি তারিখের মাসটি বাদে)।

আমি এটি দুটি কারণে সরিয়েছি:

  1. আংশিক মাস গণনা না করে দেখা যাচ্ছে যে উত্তরে আসা বেশিরভাগ (সর্বাধিক?) লোকেরা কী চায়, তাই আমি ভেবেছিলাম যে আমি তাদের আলাদা করব।

  2. এটি সর্বদা সেই সংজ্ঞা অনুসারে কাজ করে না। :-D (দুঃখিত।)


82

আপনি যদি মাসের দিনটি বিবেচনা না করেন তবে এটি এখন পর্যন্ত সহজ সমাধান

function monthDiff(dateFrom, dateTo) {
 return dateTo.getMonth() - dateFrom.getMonth() + 
   (12 * (dateTo.getFullYear() - dateFrom.getFullYear()))
}


//examples
console.log(monthDiff(new Date(2000, 01), new Date(2000, 02))) // 1
console.log(monthDiff(new Date(1999, 02), new Date(2000, 02))) // 12 full year
console.log(monthDiff(new Date(2009, 11), new Date(2010, 0))) // 1

সচেতন থাকুন যে মাসের সূচকটি 0-ভিত্তিক। এর অর্থ এটি January = 0এবং December = 11


11
আমি এখন পর্যন্ত দেখেছি কোডটি বোঝার পক্ষে এটি সবচেয়ে সংক্ষিপ্ত এবং সহজ!
ওমর

এটিকে নিয়ে জটিল কোনও কিছুই নয় যে প্রতি মাসে শুরু হয়েছিল তা গণনা করা হয়। 31/03/2011 -> 01/05/2011 দুই মাস পাশাপাশি 01/03/2011 -> 31/05/2011 হবে তবে এটি তিনটি হওয়া উচিত should
নাতিম

আপনি যদি মাসের সংখ্যা জানতে চান তবে এটি পারফেক্ট !!!!! আপনার যদি মাসের দিনগুলির ভিত্তিতে জানতে প্রয়োজন হয় তবে এটি কার্যকর হবে না।
OSDM

1
2018/01 এবং 2017/01 এ 12 মাসের ব্যবধান রয়েছে তা থেকে শুরু করুন। সেখান থেকে পিছনে কাজ। এই উত্তর এটি পেয়েছে। ;)
জেরার্ড ওনিল

1
ধন্যবাদ! এই ফাংশনটি আমার জন্য খুব সহায়ক
ট্র্যাং লং

29

কখনও কখনও আপনি পুরো অংশটিকে উপেক্ষা করে দুটি তারিখের মধ্যে মাসের পরিমাণ পেতে চাইবেন। সুতরাং উদাহরণস্বরূপ, যদি আপনার দুটি তারিখ থাকে- 2013/06/21 এবং 2013/10 / 18- এবং আপনি কেবল 2013/06 এবং 2013/10 অংশগুলি যত্ন নিচ্ছেন, তবে এখানে পরিস্থিতি এবং সম্ভাব্য সমাধানগুলি দেওয়া হয়েছে:

var date1=new Date(2013,5,21);//Remember, months are 0 based in JS
var date2=new Date(2013,9,18);
var year1=date1.getFullYear();
var year2=date2.getFullYear();
var month1=date1.getMonth();
var month2=date2.getMonth();
if(month1===0){ //Have to take into account
  month1++;
  month2++;
}
var numberOfMonths; 

1. আপনি যদি উভয় তারিখের মধ্যে মাস 1 এবং 2 মাস ব্যতীত কেবল মাসের সংখ্যা চান তবে 1.

numberOfMonths = (year2 - year1) * 12 + (month2 - month1) - 1;

2. আপনি যদি মাসের দুটি অন্তর্ভুক্ত করতে চান

numberOfMonths = (year2 - year1) * 12 + (month2 - month1);

3. আপনি যদি উভয় মাস অন্তর্ভুক্ত করতে চান

numberOfMonths = (year2 - year1) * 12 + (month2 - month1) + 1;

সুন্দর! আমার জন্য নিখুঁত কাজ করেছেন।

3
numberOfMonths=(year2-year1)*12+(month2-month1)+1;
শেষেরটির

হ্যাঁ, দুর্দান্ত এবং আরও মার্জিত পদ্ধতির।
মিকায়েল আবদুললেভ

এটি সেরা উত্তর ছিল। ধন্যবাদ!
মেরিঙ্কে

এটি সহজ এবং পরিষ্কার। দুর্দান্ত কোড লেখার জন্য আপনাকে ধন্যবাদ।
জিরো-ও-

28

এখানে একটি ফাংশন যা 2 তারিখের মধ্যে মাসের সংখ্যাটি নির্ভুলভাবে সরবরাহ করে।
ডিফল্ট আচরণটি কেবল পুরো মাস গণনা করে, যেমন 3 মাস এবং 1 দিন 3 মাসের পার্থক্যের ফলস্বরূপ। আপনি পরম roundUpFractionalMonthsহিসাবে সেট করে এটি প্রতিরোধ করতে পারেন true, সুতরাং 3 মাস এবং 1 দিনের পার্থক্য 4 মাস হিসাবে ফিরে আসবে।

উপরে গৃহীত উত্তর (টিজে ক্রডারের উত্তর) সঠিক নয়, এটি কখনও কখনও ভুল মানগুলি ফেরত দেয়।

উদাহরণস্বরূপ, monthDiff(new Date('Jul 01, 2015'), new Date('Aug 05, 2015'))রিটার্ন0 যা স্পষ্টতই ভুল। সঠিক পার্থক্যটি হয় পুরো 1 মাস বা 2 মাসের বৃত্তাকার আপ।

এখানে আমি লিখেছি ফাংশন:

function getMonthsBetween(date1,date2,roundUpFractionalMonths)
{
    //Months will be calculated between start and end dates.
    //Make sure start date is less than end date.
    //But remember if the difference should be negative.
    var startDate=date1;
    var endDate=date2;
    var inverse=false;
    if(date1>date2)
    {
        startDate=date2;
        endDate=date1;
        inverse=true;
    }

    //Calculate the differences between the start and end dates
    var yearsDifference=endDate.getFullYear()-startDate.getFullYear();
    var monthsDifference=endDate.getMonth()-startDate.getMonth();
    var daysDifference=endDate.getDate()-startDate.getDate();

    var monthCorrection=0;
    //If roundUpFractionalMonths is true, check if an extra month needs to be added from rounding up.
    //The difference is done by ceiling (round up), e.g. 3 months and 1 day will be 4 months.
    if(roundUpFractionalMonths===true && daysDifference>0)
    {
        monthCorrection=1;
    }
    //If the day difference between the 2 months is negative, the last month is not a whole month.
    else if(roundUpFractionalMonths!==true && daysDifference<0)
    {
        monthCorrection=-1;
    }

    return (inverse?-1:1)*(yearsDifference*12+monthsDifference+monthCorrection);
};

6
সিরিয়াসলি যদিও, কে এটিকে ভোট দিয়েছে? তিনি ঠিক বলেছেন, গৃহীত উত্তরটি ঠিক ... ভুল।
মাইকেল ব্ল্যাকবার্ন

2
এটি সবচেয়ে উপযুক্ত উত্তর।
কল্যাণ চাওয়ালি

ডেট 1 22 তম জানুয়ারী, এবং তারিখ 2 22 তম আগস্ট বলে যদি এটি ঠিক না হয়। তারপরে এটি 7 ফেরত দেয় যা স্পষ্টতই 8 হওয়া উচিত?
নিকোলাই হার্বো

এই গৃহীত উত্তর তৈরি করুন। এটি গ্রহণযোগ্যটির চেয়ে আরও সঠিক। উদাহরণ হিসাবে গৃহীত উত্তরগুলি দিন গণনা করে না
মুনখডেলজার তুমেনবায়ের

ক্রাউডারের গৃহীত উত্তর আপডেট করা হয়েছে। এটি এবং এই উত্তরের মধ্যে এখনও গুরুত্বপূর্ণ পার্থক্য থাকতে পারে, তবে, এই লেখার হিসাবে, এখানে তালিকাবদ্ধ উদ্বেগগুলির সমাধান করা হয়েছে।
ক্লোজাচ

22

আপনার যদি মাস, 28, 29, 30 বা 31 দিন নির্বিশেষে পুরো মাস গণনা করা দরকার। নীচে কাজ করা উচিত।

var months = to.getMonth() - from.getMonth() 
    + (12 * (to.getFullYear() - from.getFullYear()));

if(to.getDate() < from.getDate()){
    months--;
}
return months;

এটি উত্তরের https://stackoverflow.com/a/4312956/1987208 এর বর্ধিত সংস্করণ তবে এটি কেস স্থির করে যেখানে এটি 31 জানুয়ারী থেকে 1 ফেব্রুয়ারী (1 দিন) পর্যন্ত মামলার জন্য 1 মাস গণনা করে।

এটি নিম্নলিখিতটি কভার করবে;

  • 1 জানুয়ারি থেকে 31 জানুয়ারী>> 30 দিন ---> এর ফলাফল 0 হবে (যৌক্তিক যেহেতু এটি পুরো মাস নয়)
  • 1 লা ফেব্রুয়ারি থেকে 1 লা মার্চ ---> ২৮ বা ২৯ দিন ---> এর ফলাফল হবে ১ (যেহেতু এটি পুরো মাস হ'ল)
  • 15 ফেব্রুয়ারি থেকে 15 মার্চ ---> ২৮ বা ২৯ দিন ---> এর ফলাফল হবে 1 (এক মাস পেরিয়ে যাওয়ার পরে যৌক্তিক)
  • ৩১ শে জানুয়ারি থেকে ১ লা ফেব্রুয়ারী>> 1 দিন ---> এর ফলাফল 0 হবে (স্পষ্ট তবে পোস্টের উত্তরটিতে উল্লিখিত উত্তর 1 মাসের মধ্যে)

2
আমি যা ভেবেছিলাম আমি যাচাইকরণের জন্য এখানে এসেছি এবং থাই তার একমাত্র উত্তর যা আমাকে বোঝায়
আন্দ্রেয়াস

2
দু'মাসের তুলনা করার সময় এটি কার্যকর হয় না যেখানে মাসটি সংক্ষিপ্ত হয়। উদাহরণস্বরূপ, 31 শে মার্চ থেকে 30 এপ্রিল পর্যন্ত। এটা সব , এপ্রিল তাই উত্তর হবে "1."
মাইকেল ব্ল্যাকবার্ন

7

জাভাস্ক্রিপ্টে দুটি তারিখের মধ্যে মাসের পার্থক্য:

 start_date = new Date(year, month, day); //Create start date object by passing appropiate argument
 end_date = new Date(new Date(year, month, day)

শুরু_ তারিখ এবং শেষ_ তারিখের মধ্যে মোট মাস:

 total_months = (end_date.getFullYear() - start_date.getFullYear())*12 + (end_date.getMonth() - start_date.getMonth())

6

আমি জানি এটি সত্যিই দেরি হয়ে গেছে, তবে এটি অন্যকে সাহায্য করার ক্ষেত্রে কেবল পোস্ট করা। এখানে আমি একটি ফাংশন নিয়ে এসেছি যা মনে হয় দুটি তারিখের মধ্যে মাসের মধ্যে পার্থক্য গণনা করার একটি ভাল কাজ করবে। এটি মিঃ ক্রাউডারের চেয়ে এক বড় চুক্তির স্বরূপ, তবে তারিখের অবজেক্টের মাধ্যমে পদক্ষেপের মাধ্যমে আরও সঠিক ফলাফল সরবরাহ করে। এটি এএস 3-এ রয়েছে তবে আপনার শক্তিশালী টাইপিং বাদ দিতে হবে এবং আপনার জেএস হবে। এটিকে বাইরে দেখতে কাউকে নিখরচায় করুন!

    function countMonths ( startDate:Date, endDate:Date ):int
    {
        var stepDate:Date = new Date;
        stepDate.time = startDate.time;
        var monthCount:int;

        while( stepDate.time <= endDate.time ) { 
            stepDate.month += 1;
            monthCount += 1;
        }           

        if ( stepDate != endDate ) { 
            monthCount -= 1;
        }

        return monthCount;
    }

এটি বেশিরভাগ পরিস্থিতিতে সম্ভবত সঠিক পন্থা। আমাদের ক্যালেন্ডারে অনেকগুলি ব্যতিক্রম এবং অস্পষ্টতা রয়েছে, তারিখ () এর মতো একটি ভাল-পরীক্ষিত লাইব্রেরিতে তাদের হ্যান্ডলিং করার পক্ষে সর্বোত্তম পন্থা। বেশিরভাগ (সংক্ষিপ্ত) স্প্যানগুলির জন্য, এটি গণনা করা পদ্ধতির মতো একই উত্তরটি ফেরত দেবে, তবে আপনি যখন দীর্ঘ সময় নিয়ে কাজ করছেন (লিপ বছর, লিপ-বছর-দ্য-লিপ-বছর নয়, লিপ- সেকেন্ড, ইত্যাদি) আপনার সম্ভবত এমন একটি ব্যতিক্রম ঘটবে যেখানে মাসগুলি বিয়োগ করা এবং বছর যোগ করা ভুল হবে। ব্যতিক্রমগুলির জন্য আমার উত্তর দেখুন যখন গণনাটি সেরা হবে।
মাইকেল ব্ল্যাকবার্ন

5

মাসের নিরিখে প্রতিটি তারিখ বিবেচনা করুন, তারপরে পার্থক্যটি খুঁজে পেতে বিয়োগ করুন।

var past_date = new Date('11/1/2014');
var current_date = new Date();

var difference = (current_date.getFullYear()*12 + current_date.getMonth()) - (past_date.getFullYear()*12 + past_date.getMonth());

দিনগুলি উপেক্ষা করে, আপনি দুটি তারিখের মধ্যে কয়েক মাসের পার্থক্য পাবেন।


4

@ টিজে এর উত্তরটি প্রসারিত করতে, আপনি যদি পূর্ণ ক্যালেন্ডার মাসের চেয়ে সহজ মাসগুলি সন্ধান করছেন তবে আপনি কেবল ডি 2 এর তারিখ ডি 1 এর চেয়ে বেশি বা সমান কিনা তা পরীক্ষা করে দেখতে পারেন। অর্থাৎ, যদি ডি 2 তার মাসের পরে ডি 1 এর মাসের চেয়ে বেশি হয় তবে আরও 1 মাস রয়েছে। সুতরাং আপনি কেবল এটি করতে সক্ষম হবেন:

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth() + 1;
    months += d2.getMonth();
    // edit: increment months if d2 comes later in its month than d1 in its month
    if (d2.getDate() >= d1.getDate())
        months++
    // end edit
    return months <= 0 ? 0 : months;
}

monthDiff(
    new Date(2008, 10, 4), // November 4th, 2008
    new Date(2010, 2, 12)  // March 12th, 2010
);
// Result: 16; 4 Nov – 4 Dec '08, 4 Dec '08 – 4 Dec '09, 4 Dec '09 – 4 March '10

এটি সময় সংক্রান্ত সমস্যার জন্য পুরোপুরি অ্যাকাউন্ট করে না (উদাঃ 3 মার্চ বিকাল 4: 00 এ এবং 3 এপ্রিল বিকাল 3: 00 এ), তবে এটি আরও নির্ভুল এবং কোডের কয়েকটি লাইন জন্য।


4

গাণিতিক এবং দ্রুত দুটি পন্থা রয়েছে তবে এটি ক্যালেন্ডারে ভোগের বিষয়, বা পুনরাবৃত্ত ও ধীর, তবে সমস্ত বিজোড়গুলি পরিচালনা করে (বা কমপক্ষে প্রতিনিধিরা এটি একটি ভাল-পরীক্ষিত লাইব্রেরিতে পরিচালনা করছেন)।

আপনি যদি ক্যালেন্ডারে পুনরাবৃত্তি করেন, শুরু করার তারিখটি এক মাস বাড়িয়ে এবং আমরা শেষের তারিখটি পাস করি কিনা তা দেখে। এটি বিল্ট-ইন ডেট () ক্লাসগুলিতে অসাধারণভাবে হ্যান্ডলিংকে প্রতিনিধিত্ব করে, তবে আপনি যদি প্রচুর তারিখের জন্য এটি করছেন তবে ধীর হতে পারে । জেমসের উত্তর এই পদ্ধতির গ্রহণ করে। আমি যতটা ধারণা অপছন্দ করি, আমি মনে করি এটিই "নিরাপদ" পদ্ধতি এবং আপনি যদি কেবল একটি গণনা করে থাকেন তবে পারফরম্যান্সের পার্থক্যটি সত্যিই নগণ্য। আমরা কেবলমাত্র একবারে সম্পাদিত হবে এমন কার্যগুলিকে অতিরিক্ত-অনুকূলকরণ করার চেষ্টা করার প্রবণতা রাখি।

এখন, আপনি যদি কোনও ডেটাসেটে এই ফাংশনটি গণনা করছেন তবে আপনি সম্ভবত প্রতিটি সারিতে এই ফাংশনটি চালাতে চান না (বা godশ্বর নিষেধ করুন, প্রতি রেকর্ডে একাধিক বার)। সেক্ষেত্রে আপনি গ্রহণযোগ্য উত্তর ব্যতীত অন্য যে কোনও উত্তর এখানে ব্যবহার করতে পারবেন , যা কেবল ভুল (এর মধ্যে পার্থক্য new Date()এবং new Date()-১)?

এখানে গাণিতিক এবং দ্রুত পদ্ধতির কাছে আমার ছুরিকাঘাত, যা মাসের দৈর্ঘ্য এবং লিপ বছরের জন্য পৃথক হয়। আপনি যদি এটি কোনও ডেটাসেটে প্রয়োগ করছেন (এই গণনাটি আরও বেশি করে করা হচ্ছে) তবে আপনার সত্যিই কেবল এই জাতীয় ফাংশন ব্যবহার করা উচিত। আপনার যদি কেবল একবার এটি করার দরকার হয় তবে উপরে জেমসের পুনরাবৃত্তি পদ্ধতিটি ব্যবহার করুন, কারণ আপনি তারিখ () অবজেক্টটিতে সমস্ত (বহু) ব্যতিক্রম পরিচালনা করছেন।

function diffInMonths(from, to){
    var months = to.getMonth() - from.getMonth() + (12 * (to.getFullYear() - from.getFullYear()));

    if(to.getDate() < from.getDate()){
        var newFrom = new Date(to.getFullYear(),to.getMonth(),from.getDate());
        if (to < newFrom  && to.getMonth() == newFrom.getMonth() && to.getYear() %4 != 0){
            months--;
        }
    }

    return months;
}

3

এখানে আপনি কম লুপিং সহ অন্যান্য পদ্ধতির দিকে যান:

calculateTotalMonthsDifference = function(firstDate, secondDate) {
        var fm = firstDate.getMonth();
        var fy = firstDate.getFullYear();
        var sm = secondDate.getMonth();
        var sy = secondDate.getFullYear();
        var months = Math.abs(((fy - sy) * 12) + fm - sm);
        var firstBefore = firstDate > secondDate;
        firstDate.setFullYear(sy);
        firstDate.setMonth(sm);
        firstBefore ? firstDate < secondDate ? months-- : "" : secondDate < firstDate ? months-- : "";
        return months;
}

1
এই পদ্ধতির বিষয়ে সাবধান থাকুন: এটি (আপনি স্পষ্টভাবে এটি পড়ার সময় বেশ স্পষ্টতই) প্রথম তারিখটিকে রূপান্তর করেন যা কলারের কাছে ফিরে যায় (তারিখগুলি রেফারেন্স দ্বারা প্রেরণ করা হয়)।
Andiih

3

আপনি এই সমাধানটিও বিবেচনা করতে পারেন, এটি functionপূর্ণসংখ্যার বা সংখ্যার মধ্যে মাসের পার্থক্যটি প্রদান করে

প্রথম বা শেষ হিসাবে শুরুর তারিখটি পাস paramকরা ত্রুটি সহনশীল। অর্থ, ফাংশন এখনও একই মান প্রদান করবে।

const diffInMonths = (end, start) => {
   var timeDiff = Math.abs(end.getTime() - start.getTime());
   return Math.round(timeDiff / (2e3 * 3600 * 365.25));
}

const result = diffInMonths(new Date(2015, 3, 28), new Date(2010, 1, 25));

// shows month difference as integer/number
console.log(result);


অ্যাকাউন্টে লিপ বছর নেওয়ার জন্য আপনার 365.25 দিয়ে গুণ করা উচিত
darryn.ten

2

দুটি তারিখের মধ্যে পার্থক্য গণনা করে মাসের (ভগ্নাংশ) ভগ্নাংশ অন্তর্ভুক্ত।


var difference = (date2.getDate() - date1.getDate()) / 30 +
    date2.getMonth() - date1.getMonth() +
    (12 * (date2.getFullYear() - date1.getFullYear()));

উদাহরণস্বরূপ:
তারিখ 1 : 24/09/2015 (24 শে সেপ্টেম্বর 2015)
তারিখ 2 : 09/11/2015 (9 নভেম্বর 2015)
পার্থক্য: 2.5 (মাস)



1
function calcualteMonthYr(){
    var fromDate =new Date($('#txtDurationFrom2').val()); //date picker (text fields)
    var toDate = new Date($('#txtDurationTo2').val());

var months=0;
        months = (toDate.getFullYear() - fromDate.getFullYear()) * 12;
        months -= fromDate.getMonth();
        months += toDate.getMonth();
            if (toDate.getDate() < fromDate.getDate()){
                months--;
            }
    $('#txtTimePeriod2').val(months);
}

1

নিম্নোক্ত কোডগুলি আংশিক মাসের nr দিনেরও একাউন্টে গ্রহণ করে দুটি তারিখের মধ্যে পুরো মাস ফেরত দেয়।

var monthDiff = function(d1, d2) {
  if( d2 < d1 ) { 
    var dTmp = d2;
    d2 = d1;
    d1 = dTmp;
  }

  var months = (d2.getFullYear() - d1.getFullYear()) * 12;
  months -= d1.getMonth() + 1;
  months += d2.getMonth();

  if( d1.getDate() <= d2.getDate() ) months += 1;

  return months;
}

monthDiff(new Date(2015, 01, 20), new Date(2015, 02, 20))
> 1

monthDiff(new Date(2015, 01, 20), new Date(2015, 02, 19))
> 0

monthDiff(new Date(2015, 01, 20), new Date(2015, 01, 22))
> 0

1
function monthDiff(d1, d2) {
var months, d1day, d2day, d1new, d2new, diffdate,d2month,d2year,d1maxday,d2maxday;
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth() + 1;
months += d2.getMonth();
months = (months <= 0 ? 0 : months);
d1day = d1.getDate();
d2day = d2.getDate();
if(d1day > d2day)
{
    d2month = d2.getMonth();
    d2year = d2.getFullYear();
    d1new = new Date(d2year, d2month-1, d1day,0,0,0,0);
    var timeDiff = Math.abs(d2.getTime() - d1new.getTime());
          diffdate = Math.abs(Math.ceil(timeDiff / (1000 * 3600 * 24))); 
    d1new = new Date(d2year, d2month, 1,0,0,0,0);
    d1new.setDate(d1new.getDate()-1);
    d1maxday = d1new.getDate();
    months += diffdate / d1maxday;
}
else
{
      if(!(d1.getMonth() == d2.getMonth() && d1.getFullYear() == d2.getFullYear()))
    {
        months += 1;
    }
    diffdate = d2day - d1day + 1;
    d2month = d2.getMonth();
    d2year = d2.getFullYear();
    d2new = new Date(d2year, d2month + 1, 1, 0, 0, 0, 0);
    d2new.setDate(d2new.getDate()-1);
    d2maxday = d2new.getDate();
    months += diffdate / d2maxday;
}

return months;

}


1

যুক্তি নীচে কয়েক মাসের মধ্যে পার্থক্য আনতে হবে

(endDate.getFullYear()*12+endDate.getMonth())-(startDate.getFullYear()*12+startDate.getMonth())

1
function monthDiff(date1, date2, countDays) {

  countDays = (typeof countDays !== 'undefined') ?  countDays : false;

  if (!date1 || !date2) {
    return 0;
  }

  let bigDate = date1;
  let smallDate = date2;

  if (date1 < date2) {
    bigDate = date2;
    smallDate = date1;
  }

  let monthsCount = (bigDate.getFullYear() - smallDate.getFullYear()) * 12 + (bigDate.getMonth() - smallDate.getMonth());

  if (countDays && bigDate.getDate() < smallDate.getDate()) {
    --monthsCount;
  }

  return monthsCount;
}

0

আমি কী ব্যবহার করি দেখুন:

function monthDiff() {
    var startdate = Date.parseExact($("#startingDate").val(), "dd/MM/yyyy");
    var enddate = Date.parseExact($("#endingDate").val(), "dd/MM/yyyy");
    var months = 0;
    while (startdate < enddate) {
        if (startdate.getMonth() === 1 && startdate.getDate() === 28) {
            months++;
            startdate.addMonths(1);
            startdate.addDays(2);
        } else {
            months++;
            startdate.addMonths(1);
        }
    }
    return months;
}

0

এটি দিনগুলি গণনা করে এবং কয়েক মাসগুলিতে রূপান্তর করে।

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;   //calculates months between two years
    months -= d1.getMonth() + 1; 
    months += d2.getMonth();  //calculates number of complete months between two months
    day1 = 30-d1.getDate();  
    day2 = day1 + d2.getDate();
    months += parseInt(day2/30);  //calculates no of complete months lie between two dates
    return months <= 0 ? 0 : months;
}

monthDiff(
    new Date(2017, 8, 8), // Aug 8th, 2017    (d1)
    new Date(2017, 12, 12)  // Dec 12th, 2017   (d2)
);
//return value will be 4 months 

এটি কীভাবে কাজ করে তার আরও বিশদ ব্যাখ্যা যুক্ত করতে পারেন? এটি উত্তরটি আরও ভাল করবে
serge1pescoff

অনুমানের মাসগুলিতে 30 দিন রয়েছে?
বেন টালিডিয়োরোস

0

দিন এবং সময় মেলে না এমন মাসের সংখ্যা

এই ক্ষেত্রে, আমি পুরো মাস, খণ্ড মাস, এক মাস কত দিন ইত্যাদি নিয়ে উদ্বিগ্ন নই I মাসের সংখ্যাটি আমার জানা দরকার। একটি প্রাসঙ্গিক বাস্তব বিশ্ব কেস হবে যেখানে প্রতিমাসে প্রতিবেদন দেওয়া হয়, এবং আমার জানা দরকার যে সেখানে কতগুলি প্রতিবেদন করা উচিত।

উদাহরণ:

  • জানুয়ারী = 1 মাস
  • জানুয়ারি - ফেব্রুয়ারি = 2 মাস
  • নভেম্বর - জানুয়ারী = 3 মাস

নম্বরগুলি কোথায় চলছে তা দেখানোর জন্য এটি একটি বিস্তৃত কোড উদাহরণ।

আসুন 2 টি টাইমস্ট্যাম্প গ্রহণ করি যা 4 মাসের মধ্যে হওয়া উচিত

  • নভেম্বর 13, 2019 এর টাইমস্ট্যাম্প: 1573621200000
  • 20 ফেব্রুয়ারী, 2020 এর টাইমস্ট্যাম্প: 1582261140000

আপনার সময় অঞ্চল / সময় টানার সাথে কিছুটা আলাদা হতে পারে। দিন, মিনিট, এবং সেকেন্ডে কিছু যায় আসে না এবং টাইমস্ট্যাম্পে অন্তর্ভুক্ত করা যায় তবে আমরা আমাদের প্রকৃত গণনা সহ এটিকে উপেক্ষা করব।

পদক্ষেপ 1: টাইমস্ট্যাম্পটিকে একটি জাভাস্ক্রিপ্টের তারিখে রূপান্তর করুন

let dateRangeStartConverted = new Date(1573621200000);
let dateRangeEndConverted = new Date(1582261140000);

পদক্ষেপ 2: মাস / বছর ধরে পূর্ণসংখ্যার মানগুলি পান

let startingMonth = dateRangeStartConverted.getMonth();
let startingYear = dateRangeStartConverted.getFullYear();
let endingMonth = dateRangeEndConverted.getMonth();
let endingYear = dateRangeEndConverted.getFullYear();

এটি আমাদের দেয়

  • মাস শুরু হচ্ছে: 11
  • শুরুর বছর: 2019
  • সমাপ্তি মাস: 2
  • সমাপ্তি বছর: 2020

পদক্ষেপ 3: (12 * (endYear - startYear)) + 1সমাপ্তি মাসে যুক্ত করুন।

  • এটি আমাদের শুরু মাস 11 এ স্থিত করে তোলে
  • এটি আমাদের সমাপ্তি মাসকে সমান করে তোলে 15 2 + (12 * (2020 - 2019)) + 1 = 15

পদক্ষেপ 4: মাসগুলি বিয়োগ করুন

15 - 11 = 4; আমরা আমাদের 4 মাসের ফলাফল পাই।

29 মাস উদাহরণ উদাহরণ

2022 সালের মার্চ থেকে নভেম্বর 2019 পর্যন্ত 29 মাস। আপনি যদি এগুলি একটি এক্সেল স্প্রেডশীটে রাখেন তবে আপনি 29 টি সারি দেখতে পাবেন।

  • আমাদের শুরু মাস 11
  • আমাদের শেষ মাস 40 3 + (12 * (2022-2019)) + 1

40 - 11 = 29


-2
anyVar = (((DisplayTo.getFullYear() * 12) + DisplayTo.getMonth()) - ((DisplayFrom.getFullYear() * 12) + DisplayFrom.getMonth()));

3
যদিও এই কোড স্নিপেট একটি সমাধান সহ সমাধান হতে পারে, সত্যিই আপনার পোস্টের গুণমান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
ইউজিন পডস্কাল

কোনও উত্তর পোস্ট করা খুব বেশি ব্যবহার নয় যা উত্তরে ব্যাখ্যা বা সংজ্ঞায়িত নয় এমন ফাংশনগুলির উপর নির্ভর করে।
রবজি

-7

একটি পদ্ধতির জোড় লাইব্রেরি ব্যবহার করে এমন একটি সাধারণ জাভা ওয়েব সার্ভিস (REST / JSON) লিখতে হবে write

http://joda-time.sourceforge.net/faq.html#datediff

দুটি তারিখের মধ্যে পার্থক্য গণনা করতে এবং জাভাস্ক্রিপ্ট থেকে সেই পরিষেবাটি কল করতে।

এটি ধরে নেয় আপনার পিছনের প্রান্তটি জাভাতে রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.