কিভাবে দুটি তারিখের মধ্যে দিনের সংখ্যা গণনা করা যায়


282

তারিখ পিকার নিয়ন্ত্রণ থেকে নেওয়া আমার দুটি ইনপুট তারিখ রয়েছে। আমি শুরু তারিখ 2/2/2012 এবং শেষ তারিখ 2/7/2012 নির্বাচন করেছি। আমি তার জন্য নিম্নলিখিত কোড লিখেছি।

আমার ফলাফল হিসাবে 6 হওয়া উচিত তবে আমি 5 পাচ্ছি।

function SetDays(invoker) {   
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value();
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value();

    var oneDay=1000 * 60 * 60 * 24;
    var difference_ms = Math.abs(end.getTime() - start.getTime())
    var diffValue = Math.round(difference_ms / oneDay);
}

কেউ আমাকে বলতে পারেন যে আমি কীভাবে সঠিক পার্থক্য পেতে পারি?


কেন আপনার ফলাফল = 6 পাওয়া উচিত ??? 07 - 02 = 05 দিন ....
আন্দ্রে আলদাডা পাদেজ

1
তবে 2 থেকে 7 দিনের দিনের পরিসীমা 2,3,4,5,6,7 = 6 দিন।

পার্থক্য নেওয়ার সময় আমি শুরুর
তারিখটিও

17
আচ্ছা ... কেন শুধু উত্তরে 1 যোগ করবেন না?
পয়েন্টি

ইস্যুটি (যদি কোনও সমস্যা থাকে তবে) কারিগরী নয়, প্রযুক্তিগত নয়। @ পয়েন্ট মন্তব্য মন্তব্য এর উত্তর। কিছু লোক জিজ্ঞাসা করছে যে আমরা XXI শতাব্দীতে কেন।
লেয়ানড্রো

উত্তর:


666

http://momentjs.com/ বা https://date-fns.org/

মুহুর্তের ডক্স থেকে:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days')   // =1

বা শুরুটি অন্তর্ভুক্ত করতে:

a.diff(b, 'days')+1   // =2

টাইমস্ট্যাম্প এবং টাইম জোনের সাথে ম্যানুয়ালি বিড়বিড় করে।

আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে উপর নির্ভর করে আপনিও পারেন

  1. "এবং শেষগুলিতে" অন্তর্ভুক্ত বা একচেটিয়া হতে পৃথককে বাধ্য করতে a/b.startOf('day')বা / অথবা ব্যবহার a/b.endOf('day')করতে (মন্তব্যগুলিতে @ কোটপাল পরামর্শ দিয়েছিলেন)।
  2. সেট তৃতীয় যুক্তি trueএকটি ফ্লোটিং পয়েন্ট পরিবর্তন যা আপনি পরে করতে পারেন পেতে Math.floor, Math.ceilবা Math.roundহিসাবে প্রয়োজন।
  3. বিকল্প 2 এর 'seconds'পরিবর্তে 'days'এবং তারপরে বিভাজন দ্বারাও সম্পন্ন করা যায় 24*60*60

30
moment.js একটি <বি যদি নেতিবাচক মান দেয়। সুতরাং, আরও Math.abs(a.diff(b, 'days'))+1
বিনয় সাহনি

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

এটি কাজ করে তবে সময় উপাদানটিকে আমলে নেয় না। নিম্নলিখিত দুটি জোড়ার মধ্যে পার্থক্য করার চেষ্টা করছেন: (a = "2017-12-24T00: 00: 00Z" এবং "বি = 2017-12-31T23: 59: 59Z") এবং (a = "2017-12-24T23: 00) : 00Z "এবং বি =" 2017-12-31T23: 59: 59Z ")। বি। ডিফ (ক, 'দিন') <= 7; উভয় সত্য ফিরে। ডিফের মধ্যে সময় উপাদানকে অন্তর্ভুক্ত করার কোনও উপায় আছে কি?
রুবি

1
StartOf () এবং endOf () এর জন্য +1। আমি কয়েক বছর ধরে এই লাইব্রেরিটি ব্যবহার করেছি এবং এর আগে কখনও তাদের লক্ষ্য করেছি না। আমি সবসময় +1 করতাম।
মাইক দেবেনি

3
startOfমুহুর্তটি পরিবর্তন করে রাখুন সে বিষয়ে সচেতন থাকুন । আপনি যদি তা না চান, তবে করুন a.clone().startOf('day').diff(b.clone().startOf('day'))
এইচআরজে

53

আপনি যদি moment.js ব্যবহার করেন তবে আপনি এটি সহজেই করতে পারেন।

var start = moment("2018-03-10", "YYYY-MM-DD");
var end = moment("2018-03-15", "YYYY-MM-DD");

//Difference in number of days
moment.duration(start.diff(end)).asDays();

//Difference in number of weeks
moment.duration(start.diff(end)).asWeeks();

আপনি যদি প্রদত্ত তারিখ এবং দিনের সাথে সংখ্যার বর্তমান তারিখের মধ্যে পার্থক্য জানতে চান (সময় উপেক্ষা করে), তবে বর্তমান তারিখের মুহুর্তের অবজেক্ট থেকে নীচের মত সময় সরাতে ভুলবেন না

moment().startOf('day')

দিনের সংখ্যায় প্রদত্ত তারিখ এবং বর্তমান তারিখের মধ্যে পার্থক্য সন্ধান করতে

var given = moment("2018-03-10", "YYYY-MM-DD");
var current = moment().startOf('day');

//Difference in number of days
moment.duration(given.diff(current)).asDays();

2
asDays () আমাকে দশমিক সহ কিছু মান প্রদান করে। আমি current.diff(given, 'days')এটি চতুর্দিকে আপ ব্যবহার ।
ভিনসেন্ট

@ এখনও মনে হচ্ছে আপনি এটি ভুল উপায়ে ব্যবহার করছেন। এটি নিশ্চিতভাবেই আরও পরিষ্কার সমাধান যা ফলাফলটি হ'ল @ সুপ্রের উত্তরের সাথে তুলনা করে ঠিক যেটি 1হারিয়ে গেছে
নওয়াওয়াল এ ইরোমে

15

চেষ্টা করুন:

//Difference in days

var diff =  Math.floor(( start - end ) / 86400000);
alert(diff);

আমি মনে করি এটি মূলত সঠিক তবে এটি মূলত ওপিতে যা আছে তার মতো নয়?
পয়েন্টি

সে যেভাবে লিখেছিল সে কারণেই আমি লক্ষ্য করিনি, তবে হ্যাঁ, বেশ! : পি
রিচার্ড

5
আমি যাদু সংখ্যা পছন্দ করি না .. এই সংখ্যাটি স্ব-ব্যাখ্যামূলক সমীকরণে ভেঙে ফেলা ভাল হলে ভাল হবে
vsync

7

Moment.js ব্যবহার করে এটি ব্যবহার করে দেখুন (জাভাস্ক্রিপ্টে তারিখ ক্রিয়াকলাপ গণনা করা এটি বেশ সহজ)

ফার্স্টডেট.ডিফ (দ্বিতীয় তারিখ, 'দিন', মিথ্যা); ভগ্নাংশের মানের জন্য // সত্য | মিথ্যা

ফলাফল আপনাকে পূর্ণসংখ্যার দিনগুলি দেবে।


এখানে স্বাক্ষর: মুহূর্ত ()। ডিফ (মুহূর্ত | স্ট্রিং | নম্বর | তারিখ | অ্যারে, স্ট্রিং, বুলিয়ান);
সুমিত

1

এছাড়াও আপনি এই কোডটি ব্যবহার করতে পারেন: মুহুর্তটি ("আপনার তারিখহিরে", "ওয়াইওয়াইওয়াই-এমএম-ডিডি") ।নো () থেকে। এটি আজ এবং আপনার সরবরাহিত তারিখের মধ্যে পার্থক্য গণনা করবে।



1

আমি মোমেন্ট.জেএস ব্যবহার করে ES6 এ একটি দ্রুত পুনরায় ব্যবহারযোগ্য ফাংশন তৈরি করেছি।

const getDaysDiff = (start_date, end_date, date_format = 'YYYY-MM-DD') => {
  const getDateAsArray = (date) => {
    return moment(date.split(/\D+/), date_format);
  }
  return getDateAsArray(end_date).diff(getDateAsArray(start_date), 'days') + 1;
}

console.log(getDaysDiff('2019-10-01', '2019-10-30'));
console.log(getDaysDiff('2019/10/01', '2019/10/30'));
console.log(getDaysDiff('2019.10-01', '2019.10 30'));
console.log(getDaysDiff('2019 10 01', '2019 10 30'));
console.log(getDaysDiff('+++++2019!!/###10/$$01', '2019-10-30'));
console.log(getDaysDiff('2019-10-01-2019', '2019-10-30'));
console.log(getDaysDiff('10-01-2019', '10-30-2019', 'MM-DD-YYYY'));

console.log(getDaysDiff('10-01-2019', '10-30-2019'));
console.log(getDaysDiff('10-01-2019', '2019-10-30', 'MM-DD-YYYY'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>


-1

এমভিসি আমার কাছে দুটি ইনপুট পাঠ্য 1 রয়েছে: দিনের সংখ্যা 2: তারিখের সময় বাছাইকারী

 @Html.TextBox("HeaderINVID", null, new { @id = "HeaderINVID", @type = "number", @class = "form-control", autocomplete = "off", placeholder = "Day Count " })

  @Html.TextBox("HeaderINVDT", null, new { id = "HeaderINVDT", @class = "form-control format-picker", autocomplete = "off", placeholder = " Date" })

javascipt

তারিখ ব্যবহার থেকে সংখ্যা গণনা করা

    $("#HeaderINVID").bind("keyup", function (e) {
        var INVID = $("#HeaderINVID").val();
        var date = moment()
            .add(INVID, 'd')
            .toDate(); 
        $("#HeaderINVDT").val(moment(date).format('YYYY-MM-DD')) ;
    })

দুটি তারিখ ব্যবহারের মধ্যে দিনের সংখ্যা গণনা করতে

  $("#HeaderINVDT").bind('change', function (e) {
        var StDT = moment($("#HeaderINVDT").val()).startOf('day');
        var NODT = moment().startOf('day');
        $("#HeaderINVID").val(StDT.diff(NODT, 'days'));
    })

http://momentjs.com/ যোগ করতে ভুলবেন না

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