আমি কীভাবে জাভাস্ক্রিপ্টে দুটি তারিখের মধ্যে দিনের সংখ্যা পেতে পারি?


403

আমি কীভাবে জাভাস্ক্রিপ্টে দুটি তারিখের মধ্যে দিনের সংখ্যা পেতে পারি? উদাহরণস্বরূপ, ইনপুট বাক্সে দুটি তারিখ দেওয়া হয়েছে:

<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

<script>
  alert(datediff("day", first, second)); // what goes here?
</script>

5
99% ক্ষেত্রে যেখানে ব্যবহারকারী "দুটি তারিখের মধ্যে দিনের সংখ্যা" চেয়েছিলেন যা তিনি বুঝতে পারেন না সেটি হ'ল তিনি নাশপাতিগুলির সাথে আপেল তুলনা করার চেষ্টা করছেন। "একটি তারিখের পরিবর্তে কতগুলি তারিখ রয়েছে?", বা ক্যালেন্ডারে আমাকে কত স্কোয়ার অতিক্রম করতে হবে যদি জিজ্ঞাসা করা হয় তবে সমস্যাটি এত সহজ হয়ে যায়। এটি সময় এবং দিবালোক সংরক্ষণের সমস্যা ইত্যাদি ছেড়ে দেয় date ডেটটাইম ডেটা কাঠামোর কারণে আমাদের মধ্যে বিভ্রান্তি জড়িত থাকে যা খাঁটি বাজে is তারিখের সময় আছে তারিখ এবং সময় আছে বলে কিছুই নেই, প্রকৃতি এবং আচরণ উভয়ই দুটি খুব স্বতন্ত্র বস্তু
মিহাইল শিশকভ

সময়ের (পুরো) ইউনিটগুলিতে পার্থক্য বিভক্ত এমন কোনও ফাংশনের জন্য, উত্তরটি stackoverflow.com/a/53092438/3787376ব্যবহার করুন
এডওয়ার্ড 21

আমি মনে করি এই প্রশ্নটি মুছে ফেলা উচিত বা কমপক্ষে "এড়ানো" চিহ্নিত করা উচিত কারণ বেশিরভাগ উত্তর হয় ভুল বা বিভিন্ন গ্রন্থাগারের উপর নির্ভরশীল।
রবজি

উত্তর:


409

প্রশ্নের সমাধান হিসাবে সমস্যাটি সমাধানের ধারণার প্রমাণ হিসাবে এখানে একটি দ্রুত এবং নোংরা বাস্তবায়ন দেওয়া হচ্ছে datediff। এটি নির্ভর করে যে আপনি দুটি তারিখের বিয়োগ করে মিলিসেকেন্ডগুলি বিয়োগ করে পেতে পারেন, যা তাদের আদিম সংখ্যা মান (1970-এর শুরু থেকে মিলি সেকেন্ড) তে জোর করে ফেলে।

// new Date("dateString") is browser-dependent and discouraged, so we'll write
// a simple parse function for U.S. date format (which does no error checking)
function parseDate(str) {
    var mdy = str.split('/');
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function datediff(first, second) {
    // Take the difference between the dates and divide by milliseconds per day.
    // Round to nearest whole number to deal with DST.
    return Math.round((second-first)/(1000*60*60*24));
}

alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

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

এছাড়াও, উদাহরণের উদ্দেশ্যে, স্নিপেটটি ব্রেভিটির জন্য অবজেক্টের নামযুক্ত অ্যাক্সেস ব্যবহার করেwindow তবে উত্পাদনে আপনাকে getElementById , বা সম্ভবত আরও কিছু UI ফ্রেমওয়ার্কের মতো মানকযুক্ত API ব্যবহার করা উচিত ।


2
আমি মনে করি ম্যাথ.ট্রুঙ্ক () আরও উপযুক্ত। ঠিক যদি কেউ আরও সুনির্দিষ্ট তারিখ অবজেক্ট ব্যবহার করে (যেমন ঘন্টা, মিনিট এবং সেকেন্ড সহ)
জিন ওয়াং

21
যে উত্তরটি সঠিক হিসাবে চিহ্নিত হয়েছে এবং সর্বোচ্চ ভোট হয়েছে (এখনকার হিসাবে), এটি মন্তব্য করা উচিত যে এই উত্তরটি দিবালোক সঞ্চয় সময় সঠিকভাবে পরিচালনা করে না। পরিবর্তে মাইকেল লির উত্তর দেখুন।
অসুলিক

পার্সেটেট ঠিক কী করে?
মোহাম্মদ করমানি

2
@ অসুলিক — এই উত্তরটি ম্যাথ.উইন্ডের সাথে দিবালোক সংরক্ষণ পরিচালনা করে , তবে এটি কেবল তারিখ এবং সময় নয় কেবল তারিখের স্ট্রিং হবার প্রত্যাশা করে।
রবজি

2
কেবল মনে রাখবেন যে তারিখটি মার্কিন উদাহরণে এই উদাহরণে রয়েছে, যেমন এমএম / ডিডি / ওয়াইওয়াইওয়াই। আপনার যদি ইউকে সংস্করণ দরকার হয় তবে আপনার parseDateপদ্ধতিটি পরিবর্তনের প্রয়োজন :return new Date(mdy[2], mdy[1], mdy[0]-1);
ভাইকাস

207

এই লেখার হিসাবে, অন্য উত্তরগুলির মধ্যে একটি সঠিকভাবে ডিএসটি (দিবালোক সংরক্ষণের সময়) রূপান্তরগুলি পরিচালনা করে। ক্যালিফোর্নিয়ায় অবস্থিত একটি সিস্টেমে ফলাফল এখানে:

                                        1/1/2013- 3/10/2013- 11/3/2013-
User       Formula                      2/1/2013  3/11/2013  11/4/2013  Result
---------  ---------------------------  --------  ---------  ---------  ---------
Miles                   (d2 - d1) / N   31        0.9583333  1.0416666  Incorrect
some         Math.floor((d2 - d1) / N)  31        0          1          Incorrect
fuentesjr    Math.round((d2 - d1) / N)  31        1          1          Correct
toloco     Math.ceiling((d2 - d1) / N)  31        1          2          Incorrect

N = 86400000

যদিও Math.roundসঠিক ফলাফলগুলি প্রদান করে, আমি মনে করি এটি কিছুটা জটিল un পরিবর্তে, ডিটিএসটি শুরু বা শেষ হলে ইউটিসি অফসেটে পরিবর্তনের জন্য স্পষ্টভাবে অ্যাকাউন্টিং করে আমরা সঠিক পাটিগণিত ব্যবহার করতে পারি:

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

alert(daysBetween($('#first').val(), $('#second').val()));

ব্যাখ্যা

জাভাস্ক্রিপ্টের তারিখ গণনাগুলি জটিল কারণ Dateবিষয়গুলি স্থানীয় সময় নয়, ইউটিসি-তে অভ্যন্তরীণভাবে সঞ্চয় করে store উদাহরণস্বরূপ, 3/10/2013 12:00 এএম প্যাসিফিক স্ট্যান্ডার্ড সময় (UTC-08: 00) 3/10/2013 8:00 AM UTC, এবং 3/11/2013 12:00 এএম প্যাসিফিক দিবালোক সময় ( ইউটিসি -07: 00) 3/11/2013 7:00 পূর্বাহ্ণ ইউটিসি হিসাবে সঞ্চিত রয়েছে। এই দিন, মধ্যরাত থেকে মধ্যরাত স্থানীয় সময়টি ইউটিসিতে মাত্র 23 ঘন্টা!

যদিও স্থানীয় সময়ে কোনও দিনে 24 ঘন্টা কম বা কম সময় থাকতে পারে, ইউটিসিতে একটি দিন সর্বদা 24 ঘন্টা থাকে। 1daysBetween পদ্ধতি উপরে দেখানো প্রথম ডাকে এই সত্য সুবিধা নেয় treatAsUTCবিয়োগ এবং বিভাজক আগে, মধ্যরাত ইউটিসি উভয় স্থানীয় বার সমন্বয়।

1. জাভাস্ক্রিপ্ট লিপ সেকেন্ডে উপেক্ষা করে।


2
ইউটিসি ব্যবহার করার দরকার নেই, কেবলমাত্র স্থানীয় সময়কে মধ্যরাতে (বা উভয় তারিখের জন্য একই মান) নির্ধারণ করা ভাল। দিবালোক সংরক্ষণের মাধ্যমে ভগ্নাংশের দিনটি সর্বাধিক (some এবং কিছু জায়গায় কম) কেবলমাত্র 0.04 ডলার , সুতরাং এটি ম্যাথ.উন্ডের সাথে গোল হয় । ;-) তারিখের নির্মাণকারীর উপর নির্ভর করে স্ট্রিংগুলি বিশ্লেষণ করতে কোনও ভাল ধারণা নয়। আপনি যদি সত্যিই ইউটিসি মান ব্যবহার করতে চান Date.UTC(...)তবে প্রথম স্থানে স্ট্রিংগুলি পার্স করুন ।
রবিজি

2
@ রবজি: যেমনটি আমি আমার উত্তরে বলেছি: "যদিও ম্যাথ.গ্রাউন্ড সঠিক ফলাফল দেয়, আমি মনে করি এটি কিছুটা জটিল।
মাইকেল লিউ

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

116

দুটি তারিখের মধ্যে পার্থক্য পাওয়ার সহজতম উপায়:

var diff =  Math.floor(( Date.parse(str2) - Date.parse(str1) ) / 86400000); 

আপনি পার্থক্যের দিনগুলি পান (বা NaN যদি একটি বা উভয়কে বিশ্লেষণ করা যায় না)। পার্সের তারিখটি মিলি সেকেন্ডে ফলাফল দেয় এবং এটির জন্য এটি আপনাকে 24 * 60 * 60 * 1000 দ্বারা ভাগ করতে হবে

আপনি যদি এটি দিন, ঘন্টা, মিনিট, সেকেন্ড এবং মিলিসেকেন্ড দ্বারা ভাগ করে নিতে চান:

function dateDiff( str1, str2 ) {
    var diff = Date.parse( str2 ) - Date.parse( str1 ); 
    return isNaN( diff ) ? NaN : {
        diff : diff,
        ms : Math.floor( diff            % 1000 ),
        s  : Math.floor( diff /     1000 %   60 ),
        m  : Math.floor( diff /    60000 %   60 ),
        h  : Math.floor( diff /  3600000 %   24 ),
        d  : Math.floor( diff / 86400000        )
    };
}

জেমস সংস্করণটির আমার রিফ্যাক্টরড সংস্করণটি এখানে:

function mydiff(date1,date2,interval) {
    var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7;
    date1 = new Date(date1);
    date2 = new Date(date2);
    var timediff = date2 - date1;
    if (isNaN(timediff)) return NaN;
    switch (interval) {
        case "years": return date2.getFullYear() - date1.getFullYear();
        case "months": return (
            ( date2.getFullYear() * 12 + date2.getMonth() )
            -
            ( date1.getFullYear() * 12 + date1.getMonth() )
        );
        case "weeks"  : return Math.floor(timediff / week);
        case "days"   : return Math.floor(timediff / day); 
        case "hours"  : return Math.floor(timediff / hour); 
        case "minutes": return Math.floor(timediff / minute);
        case "seconds": return Math.floor(timediff / second);
        default: return undefined;
    }
}

2
খারাপ উত্তর। ম্যাথ ডাব্লু ফ্লোর () এমন একদিন আপনাকে হারাবে যখন ঘড়িগুলি দিবালোকের সঞ্চয়ে এগিয়ে যায়। ম্যাথ.াউন্ড () বেশিরভাগ পরিস্থিতিতে সঠিক উত্তর দেবে তবে অন্য উত্তরের ক্ষেত্রে আরও ভাল বিকল্প রয়েছে।
ফিল বি

101

আমি moment.js গ্রন্থাগারটি ব্যবহার করার পরামর্শ দিচ্ছি ( http://momentjs.com/docs/#/displaying/differences/ )। এটি দিবালোকের সঞ্চয় সময় সঠিকভাবে পরিচালনা করে এবং সাধারণভাবে এটির সাথে কাজ করা দুর্দান্ত।

উদাহরণ:

var start = moment("2013-11-03");
var end = moment("2013-11-04");
end.diff(start, "days")
1

10
মুহুর্তগুলি দুর্দান্ত হওয়ার সময় যেমন একটি সতর্কতা ছিল তেমনি এটি বেশ বড় নির্ভরতা
জেসন অ্যাকসেলসন

end.diff(start,"days")লিখিত হিসাবে কোডটি কাজ করবে যদিও এটি সত্যই হওয়া উচিত কারণ শুরুর তারিখটি শেষের তারিখের পরে!
gordon613

40

আমি এগিয়ে গিয়ে এই ছোট্ট ইউটিলিটিটি দখল করব এবং এতে এটি আপনার জন্য কার্যকারিতা পাবেন। একটি সংক্ষিপ্ত উদাহরণ এখানে:

        <script type="text/javascript" src="date.js"></script>
        <script type="text/javascript">
            var minutes = 1000*60;
            var hours = minutes*60;
            var days = hours*24;

            var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
            var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");

            var diff_date = Math.round((foo_date2 - foo_date1)/days);
            alert("Diff date is: " + diff_date );
        </script>

28
const startDate = '2017-11-08';
const endDate   = '2017-10-01';
const timeDiff  = (new Date(startDate)) - (new Date(endDate));
const days      = timeDiff / (1000 * 60 * 60 * 24)
  1. শুরু করার তারিখ সেট করুন
  2. শেষের তারিখ নির্ধারণ করুন
  3. পার্থক্য গণনা
  4. মিলিসেকেন্ডগুলিকে দিনগুলিতে রূপান্তর করুন

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


5
আমি এইগুলির মতো উত্তরগুলির প্রশংসা করি: সংক্ষিপ্ত, সহজ এবং কোনও এলোমেলো নির্ভরতার প্রয়োজন নেই! চিয়ার্স।
ডকোদা

2
এটা কি শুধু আমি timeDiffনেতিবাচক ফিরে এসেছি ? না করা উচিত timeDiffহবে (new Date(endDate)) - (new Date(startDate));?
ফেইসায়ো সোনুবি

@ ফ্যাইসায়ো-সোনুবি নির্ভর করে আপনি কোন অর্ডারটি আপনার শুরু এবং শেষের তারিখে পাস করবেন তার উপর নির্ভর করে। এই উদাহরণে(new Date('2017-11-08')) - (new Date('2017-10-01')) // 3283200000
marcobiedermann

const timeDiff = +(new Date(start)) - +(new Date(end));
বেন র্যাকিকোট

গ্রেট। যদিও আমি পছন্দ করিreturn (Date.UTC(yr2, mo2-1, dy2) - Date.UTC(yr1, mo1-1, dy1)) / 86400000;
dcromley

13

মোমেন্ট.জেএস ব্যবহার করে

var future = moment('05/02/2015');
var start = moment('04/23/2015');
var d = future.diff(start, 'days'); // 9
console.log(d);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>


মুহূর্ত.js var now = moment(), yearStart = moment().startOf('year'); var ytdDays = now.diff(yearStart, 'days'); // this can be years, months, weeks, days, hours, minutes, and seconds console.log(ytdDays); এখানে ওয়াইটিডি ডিফের মতো বিষয়গুলির জন্য সত্যই কার্যকর : momentjs.com
শরীফ

10

জেএসে তারিখের মান হ'ল তারিখের মান।

সুতরাং, সরাসরি তারিখের গণনাগুলি বেমানান:

(2013-11-05 00:00:00) - (2013-11-04 10:10:10) < 1 day

উদাহরণস্বরূপ আমাদের ডি ২ য় তারিখ রূপান্তর করতে হবে:

(2013-11-05 00:00:00) - (2013-11-04 00:00:00) = 1 day

পদ্ধতিটি উভয় তারিখে মিলগুলি কেটে ফেলতে পারে:

var date1 = new Date('2013/11/04 00:00:00');
var date2 = new Date('2013/11/04 10:10:10'); //less than 1
var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates
console.log(daysDiff);

date2 = new Date('2013/11/05 00:00:00'); //1

var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates
console.log(daysDiff);


9

ইউটিসি সময় ব্যবহার করে ডিএসটি, ম্যাথ.সিল, ম্যাথ.ফ্লুর ইত্যাদি থেকে মুক্তি পাওয়া ভাল:

var firstDate = Date.UTC(2015,01,2);
var secondDate = Date.UTC(2015,04,22);
var diff = Math.abs((firstDate.valueOf() 
    - secondDate.valueOf())/(24*60*60*1000));

এই উদাহরণটি 109 দিন পার্থক্য দেয়। 24*60*60*1000একদিন মিলিসেকেন্ডে।


9

প্রদত্ত 2 তারিখের মধ্যে দিনের গণনা করতে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন I আমি এখানে যে তারিখগুলি ব্যবহার করি তা জানুয়ারি 01 2016 এবং 31 ডিসেম্বর 2016

var day_start = new Date("Jan 01 2016");
var day_end = new Date("Dec 31 2016");
var total_days = (day_end - day_start) / (1000 * 60 * 60 * 24);
document.getElementById("demo").innerHTML = Math.round(total_days);
<h3>DAYS BETWEEN GIVEN DATES</h3>
<p id="demo"></p>


9

নিম্নলিখিত সূত্রটি ব্যবহার করে বিভিন্ন টিজেড জুড়ে থাকা দুটি তারিখের মধ্যে পূর্ণ প্রমাণ দিনের পার্থক্য গণনা করা সম্ভব:

var start = new Date('10/3/2015');
var end = new Date('11/2/2015');
var days = (end - start) / 1000 / 60 / 60 / 24;
console.log(days);
// actually its 30 ; but due to daylight savings will show 31.0xxx
// which you need to offset as below
days = days - (end.getTimezoneOffset() - start.getTimezoneOffset()) / (60 * 24);
console.log(days);


এটি সবচেয়ে সঠিক উত্তর, আপনাকে ডিএসটি বিবেচনায় নিতে হবে! ধন্যবাদ
গিসওয়ে

6

আমি এই প্রশ্নটি খুঁজে পেয়েছি যখন আমি দুটি তারিখে কিছু গণনা করতে চাই, তবে তারিখটির ঘন্টা এবং মিনিটের মান রয়েছে, আমি আমার প্রয়োজন অনুসারে @ মাইকেল-লিউ'র উত্তরটি পরিবর্তন করেছি এবং এটি আমার পরীক্ষায় উত্তীর্ণ হয়েছে।

পৃথক দিন 2012-12-31 23:00এবং 2013-01-01 01:00সমান হওয়া উচিত 1. (2 ঘন্টা) পৃথক দিন 2012-12-31 01:00এবং 2013-01-01 23:00সমান হতে হবে 1. (46 ঘন্টা)

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

var millisecondsPerDay = 24 * 60 * 60 * 1000;
function diffDays(startDate, endDate) {
    return Math.floor(treatAsUTC(endDate) / millisecondsPerDay) - Math.floor(treatAsUTC(startDate) / millisecondsPerDay);
}


6

আমি মনে করি সমাধানগুলি সঠিক নয় 100% আমি ফ্লোরের পরিবর্তে সিল ব্যবহার করব, বৃত্তাকার কাজ করবে তবে এটি সঠিক অপারেশন নয়।

function dateDiff(str1, str2){
    var diff = Date.parse(str2) - Date.parse(str1); 
    return isNaN(diff) ? NaN : {
        diff: diff,
        ms: Math.ceil(diff % 1000),
        s: Math.ceil(diff / 1000 % 60),
        m: Math.ceil(diff / 60000 % 60),
        h: Math.ceil(diff / 3600000 % 24),
        d: Math.ceil(diff / 86400000)
    };
}

4
দিনগুলিতে 24 ঘন্টােরও বেশি সময় থাকতে পারে এবং মিনিটে 60 সেকেন্ডেরও বেশি সময় থাকতে পারে। ম্যাথ.সিল () ব্যবহার করা এই ক্ষেত্রে অতিরিক্ত গণনা করবে।
ধনী ডঘের্টি

5

কি ব্যবহার সম্পর্কে formatDate DatePicker উইজেট থেকে? আপনি তারিখগুলি টাইমস্ট্যাম্প বিন্যাসে রূপান্তর করতে ব্যবহার করতে পারেন (01/01/1970 থেকে মিলিসেকেন্ড) এবং তারপরে একটি সাধারণ বিয়োগফল করতে পারেন।


5

function timeDifference(date1, date2) {
  var oneDay = 24 * 60 * 60; // hours*minutes*seconds
  var oneHour = 60 * 60; // minutes*seconds
  var oneMinute = 60; // 60 seconds
  var firstDate = date1.getTime(); // convert to milliseconds
  var secondDate = date2.getTime(); // convert to milliseconds
  var seconds = Math.round(Math.abs(firstDate - secondDate) / 1000); //calculate the diffrence in seconds
  // the difference object
  var difference = {
    "days": 0,
    "hours": 0,
    "minutes": 0,
    "seconds": 0,
  }
  //calculate all the days and substract it from the total
  while (seconds >= oneDay) {
    difference.days++;
    seconds -= oneDay;
  }
  //calculate all the remaining hours then substract it from the total
  while (seconds >= oneHour) {
    difference.hours++;
    seconds -= oneHour;
  }
  //calculate all the remaining minutes then substract it from the total 
  while (seconds >= oneMinute) {
    difference.minutes++;
    seconds -= oneMinute;
  }
  //the remaining seconds :
  difference.seconds = seconds;
  //return the difference object
  return difference;
}
console.log(timeDifference(new Date(2017,0,1,0,0,0),new Date()));


1
আমি আপনাকে অনুরোধ করতে দয়া করে আপনার উত্তর কাছাকাছি আরও কিছু প্রসঙ্গ যুক্ত করুন। কোড-কেবল উত্তরগুলি বোঝা মুশকিল। আপনি যদি আপনার পোস্টে আরও তথ্য যুক্ত করতে পারেন তবে এটি প্রশ্নকারী এবং ভবিষ্যতের পাঠকদের উভয়কেই সহায়তা করবে।
আরবিটি

আমি সম্পাদনা করতে চেয়েছিলাম তবে আমি সম্পাদনাটি জমা দিতে পারছিলাম এমন ত্রুটি পেয়ে
যাচ্ছিলাম

2
@ এন.বেলহাদজ আপনি সরল ডিভ এবং মোড (%) ক্রিয়াকলাপের সাথে লুপগুলি সংশোধন করতে পারবেন
মিহাইল শিশকভ

4

এটি সর্বাধিক মার্জিত সমাধান নাও হতে পারে, তবে মনে হয় এটি তুলনামূলকভাবে সহজ বিট দিয়ে প্রশ্নের উত্তর দেয়। আপনি কি এরকম কিছু ব্যবহার করতে পারবেন না:

function dayDiff(startdate, enddate) {
  var dayCount = 0;

  while(enddate >= startdate) {
    dayCount++;
    startdate.setDate(startdate.getDate() + 1);
  }

return dayCount; 
}

এটি ধরে নেওয়া হচ্ছে আপনি তারিখের অবজেক্টগুলি পরামিতি হিসাবে পাস করছেন।


4

আপনার যদি দুটি ইউনিক্স টাইমস্ট্যাম্প থাকে তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন (স্পষ্টতার জন্য কিছুটা আরও ভার্বোজ তৈরি করেছেন):

// Calculate number of days between two unix timestamps
// ------------------------------------------------------------
var daysBetween = function(timeStampA, timeStampB) {
    var oneDay = 24 * 60 * 60 * 1000; // hours * minutes * seconds * milliseconds
    var firstDate = new Date(timeStampA * 1000);
    var secondDate = new Date(timeStampB * 1000);
    var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
    return diffDays;
};

উদাহরণ:

daysBetween(1096580303, 1308713220); // 2455

4

মিলিসেকেন্ড ব্যবহার করার সময় সতর্কতা অবলম্বন করুন ।

Date.getTime () মিলিসেকেন্ড ফেরৎ এবং করছেন মিলিসেকেন্ড সঙ্গে গণিত অপারেশন অন্তর্ভুক্ত করা প্রয়োজন

  • দিবালোক সংরক্ষণের সময় (ডিএসটি)
  • উভয় তারিখের একই সময় (ঘন্টা, মিনিট, সেকেন্ড, মিলিসেকেন্ড) রয়েছে কিনা তা পরীক্ষা করা হচ্ছে
  • দিনগুলির কী আচরণের প্রয়োজন তা নিশ্চিত করুন: 19 সেপ্টেম্বর 2016 - 29 সেপ্টেম্বর 2016 = 1 বা 2 দিনের পার্থক্য?

উপরের মন্তব্যটির উদাহরণ হ'ল আমি এখনও অবধি সবচেয়ে ভাল সমাধানটি পেয়েছি https://stackoverflow.com/a/11252167/2091095 । তবে আপনি যদি জড়িত সমস্ত দিন গণনা করতে চান তবে এর ফলাফলটিতে +1 ব্যবহার করুন ।

function treatAsUTC(date) {
    var result = new Date(date);
    result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
    return result;
}

function daysBetween(startDate, endDate) {
    var millisecondsPerDay = 24 * 60 * 60 * 1000;
    return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}

var diff = daysBetween($('#first').val(), $('#second').val()) + 1;

4

Date.prototype.days = function(to) {
  return Math.abs(Math.floor(to.getTime() / (3600 * 24 * 1000)) - Math.floor(this.getTime() / (3600 * 24 * 1000)))
}


console.log(new Date('2014/05/20').days(new Date('2014/05/23'))); // 3 days

console.log(new Date('2014/05/23').days(new Date('2014/05/20'))); // 3 days


3

আমার কৌণিক একই সমস্যা ছিল। আমি অনুলিপিটি করি কারণ অন্যথায় তিনি প্রথম তারিখটি ওভাররাইট করে দেবেন। উভয় তারিখের অবশ্যই সময় থাকতে হবে 00:00:00 (স্পষ্টতই)

 /*
* Deze functie gebruiken we om het aantal dagen te bereken van een booking.
* */
$scope.berekenDagen = function ()
{
    $scope.booking.aantalDagen=0;

    /*De loper is gelijk aan de startdag van je reservatie.
     * De copy is nodig anders overschijft angular de booking.van.
     * */
    var loper = angular.copy($scope.booking.van);

    /*Zolang de reservatie beschikbaar is, doorloop de weekdagen van je start tot einddatum.*/
    while (loper < $scope.booking.tot) {
        /*Tel een dag op bij je loper.*/
        loper.setDate(loper.getDate() + 1);
        $scope.booking.aantalDagen++;
    }

    /*Start datum telt natuurlijk ook mee*/
    $scope.booking.aantalDagen++;
    $scope.infomsg +=" aantal dagen: "+$scope.booking.aantalDagen;
};

3

আমি কোনও সংবাদ পোস্টের জন্য পোস্টিং তারিখের কার্যকারিতা পরীক্ষা করতে কোডের নীচে ব্যবহার করেছি I আমি পোস্টের তারিখ এবং বর্তমান তারিখের ভিত্তিতে মিনিট বা ঘন্টা বা দিন বা বছর গণনা করি।

var startDate= new Date("Mon Jan 01 2007 11:00:00");
var endDate  =new Date("Tue Jan 02 2007 12:50:00");
var timeStart = startDate.getTime();
var timeEnd = endDate.getTime();
var yearStart = startDate.getFullYear();
var yearEnd   = endDate.getFullYear();
if(yearStart == yearEnd)
 {
  var hourDiff = timeEnd - timeStart; 
  var secDiff = hourDiff / 1000;
  var minDiff = hourDiff / 60 / 1000; 
  var hDiff = hourDiff / 3600 / 1000; 
  var myObj = {};
  myObj.hours = Math.floor(hDiff);
  myObj.minutes = minDiff  
  if(myObj.hours >= 24)
   {
    console.log(Math.floor(myObj.hours/24) + "day(s) ago")
   } 
 else if(myObj.hours>0)
  {
   console.log(myObj.hours +"hour(s) ago")
  }
 else
  {
   console.log(Math.abs(myObj.minutes) +"minute(s) ago")
  }
}
else
{
var yearDiff = yearEnd - yearStart;
console.log( yearDiff +" year(s) ago");
}

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

2
এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরটির দীর্ঘমেয়াদী মান উন্নত হবে।
মাইকেল পার্কার

ধন্যবাদ @ MarcoScabbiolo, @ মাইকেল পার্কার comments.Since জন্য আমি নতুন Stackoverflow জবাবে পরিপ্রেক্ষিতে, আমি সচেতন ছিল না কিভাবে সমাধান proivided হবে
Ramees Rahath

3

আপনি যদি খেজুরের সাথে ডেটআরে করতে চান তবে এটি ব্যবহার করে দেখুন:

<script>
        function getDates(startDate, stopDate) {
        var dateArray = new Array();
        var currentDate = moment(startDate);
        dateArray.push( moment(currentDate).format('L'));

        var stopDate = moment(stopDate);
        while (dateArray[dateArray.length -1] != stopDate._i) {
            dateArray.push( moment(currentDate).format('L'));
            currentDate = moment(currentDate).add(1, 'days');
        }
        return dateArray;
      }
</script>

DebugSnippet


3

দুটি তারিখের মধ্যে দিন গণনা করার সহজ উপায় হ'ল তাদের উভয় সময় উপাদানকে সময় নির্ধারণ করা, যেমন ঘন্টা, মিনিট, সেকেন্ড এবং মিলিসেকেন্ডগুলি 0 এ সেট করা এবং তারপরে তাদের সময় বিয়োগ করে এক দিনের মূল্যকে মিলিসেকেন্ড দিয়ে ডাইভিং করা।

var firstDate= new Date(firstDate.setHours(0,0,0,0));
var secondDate= new Date(secondDate.setHours(0,0,0,0));
var timeDiff = firstDate.getTime() - secondDate.getTime();
var diffDays =timeDiff / (1000 * 3600 * 24);

আপনার সমাধানের সমস্যাটি হ'ল, আপনি প্রথম তারিখ এবং দ্বিতীয় তারিখটিকে তারিখ হিসাবে ধরে নিচ্ছেন যা সেগুলি আবার তারিখে পরিবর্তন করার দরকার নেই, এবং যদি সেগুলি তারিখ না হয় * যা না হয়) আপনি সেটহর্সে ত্রুটি পাবেন। এটি সংশোধন করার জন্য, আপনাকে সেটএইচআরসগুলি বাইরে চলে যেতে হবেnew Date
এএএ

2
function formatDate(seconds, dictionary) {
    var foo = new Date;
    var unixtime_ms = foo.getTime();
    var unixtime = parseInt(unixtime_ms / 1000);
    var diff = unixtime - seconds;
    var display_date;
    if (diff <= 0) {
        display_date = dictionary.now;
    } else if (diff < 60) {
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.second;
        } else {
            display_date = diff + ' ' + dictionary.seconds;
        }
    } else if (diff < 3540) {
        diff = Math.round(diff / 60);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.minute;
        } else {
            display_date = diff + ' ' + dictionary.minutes;
        }
    } else if (diff < 82800) {
        diff = Math.round(diff / 3600);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.hour;
        } else {
            display_date = diff + ' ' + dictionary.hours;
        }
    } else {
        diff = Math.round(diff / 86400);
        if (diff == 1) {
            display_date = diff + ' ' + dictionary.day;
        } else {
            display_date = diff + ' ' + dictionary.days;
        }
    }
    return display_date;
}

2

সহজ সহজ এবং পরিশীলিত। এই ফাংশনটি প্রতি 1 সেকেন্ডে সময় আপডেট করার জন্য ডাকা হবে।

const year = (new Date().getFullYear());
const bdayDate = new Date("04,11,2019").getTime();  //mmddyyyy

// countdown
let timer = setInterval(function() {

// get today's date
const today = new Date().getTime();

// get the difference
const diff = bdayDate - today;

// math
let days = Math.floor(diff / (1000 * 60 * 60 * 24));
let hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
let minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
let seconds = Math.floor((diff % (1000 * 60)) / 1000);

}, 1000);

1

একটি ভাল সমাধান দ্বারা

সময়ের অংশ উপেক্ষা করা

উভয় তারিখ একই থাকলে এটি 0 আসবে।

function dayDiff(firstDate, secondDate) {
  firstDate = new Date(firstDate);
  secondDate = new Date(secondDate);
  if (!isNaN(firstDate) && !isNaN(secondDate)) {
    firstDate.setHours(0, 0, 0, 0); //ignore time part
    secondDate.setHours(0, 0, 0, 0); //ignore time part
    var dayDiff = secondDate - firstDate;
    dayDiff = dayDiff / 86400000; // divide by milisec in one day
    console.log(dayDiff);
  } else {
    console.log("Enter valid date.");
  }
}

$(document).ready(function() {
  $('input[type=datetime]').datepicker({
    dateFormat: "mm/dd/yy",
    changeMonth: true,
    changeYear: true
  });
  $("#button").click(function() {
    dayDiff($('#first').val(), $('#second').val());
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<input type="datetime" id="first" value="12/28/2016" />
<input type="datetime" id="second" value="12/28/2017" />
<input type="button" id="button" value="Calculate">


1

একটি অবদান, 1970-01-01 এর আগে এবং 2038-01-19 এর পরে তারিখের জন্য

function DateDiff(aDate1, aDate2) {
  let dDay = 0;
  this.isBissexto = (aYear) => {
    return (aYear % 4 == 0 && aYear % 100 != 0) || (aYear % 400 == 0);
  };
  this.getDayOfYear = (aDate) => {
    let count = 0;
    for (let m = 0; m < aDate.getUTCMonth(); m++) {
      count += m == 1 ? this.isBissexto(aDate.getUTCFullYear()) ? 29 : 28 : /(3|5|8|10)/.test(m) ? 30 : 31;
    }
    count += aDate.getUTCDate();
    return count;
  };
  this.toDays = () => {
    return dDay;
  };
  (() => {
    let startDate = aDate1.getTime() <= aDate2.getTime() ? new Date(aDate1.toISOString()) : new Date(aDate2.toISOString());
    let endDate = aDate1.getTime() <= aDate2.getTime() ? new Date(aDate2.toISOString()) : new Date(aDate1.toISOString());
    while (startDate.getUTCFullYear() != endDate.getUTCFullYear()) {
      dDay += (this.isBissexto(startDate.getFullYear())? 366 : 365) - this.getDayOfYear(startDate) + 1;
      startDate = new Date(startDate.getUTCFullYear()+1, 0, 1);
    }
    dDay += this.getDayOfYear(endDate) - this.getDayOfYear(startDate);
  })();
}

0
   function validateDate() {
        // get dates from input fields
        var startDate = $("#startDate").val();
        var endDate = $("#endDate").val();
        var sdate = startDate.split("-");
        var edate = endDate.split("-");
        var diffd = (edate[2] - sdate[2]) + 1;
        var leap = [ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
        var nonleap = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
        if (sdate[0] > edate[0]) {
            alert("Please enter End Date Year greater than Start Date Year");
            document.getElementById("endDate").value = "";
            diffd = "";
        } else if (sdate[1] > edate[1]) {
            alert("Please enter End Date month greater than Start Date month");
            document.getElementById("endDate").value = "";
            diffd = "";
        } else if (sdate[2] > edate[2]) {
            alert("Please enter End Date greater than Start Date");
            document.getElementById("endDate").value = "";
            diffd = "";
        } else {
            if (sdate[0] / 4 == 0) {
                while (sdate[1] < edate[1]) {
                    diffd = diffd + leap[sdate[1]++];
                }
            } else {
                while (sdate[1] < edate[1]) {
                    diffd = diffd + nonleap[sdate[1]++];
                }
            }
            document.getElementById("numberOfDays").value = diffd;
        }
    }

0

আপনি পার্থক্য নির্ধারণ এবং গণনার জন্য অ্যান্ডস্কোরজেএস ব্যবহার করতে পারেন।

ডেমো https://jsfiddle.net/sumitridhal/8sv94msp/

 var startDate = moment("2016-08-29T23:35:01");
var endDate = moment("2016-08-30T23:35:01");  
  

console.log(startDate);
console.log(endDate);

var resultHours = endDate.diff(startDate, 'hours', true);

document.body.innerHTML = "";
document.body.appendChild(document.createTextNode(resultHours));
body { white-space: pre; font-family: monospace; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>

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