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


111

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

উত্তর:


73

জাভাস্ক্রিপ্টে, তারিখগুলি getTime()পদ্ধতিটি কল করে বা এপোকের পর থেকে মিলিসেকেন্ডের সংখ্যায় রূপান্তরিত হতে পারে কেবলমাত্র একটি সংখ্যাসূচক প্রকাশের মাধ্যমে তারিখটি ব্যবহার করে ।

সুতরাং পার্থক্য পেতে, কেবল দুটি তারিখ বিয়োগ করুন।

পার্থক্যের ভিত্তিতে একটি নতুন তারিখ তৈরি করতে, কেবল কনস্ট্রাক্টরের মিলিসেকেন্ডের সংখ্যাটি পাস করুন।

var oldBegin = ...
var oldEnd = ...
var newBegin = ...

var newEnd = new Date(newBegin + oldEnd - oldBegin);

এটি শুধু কাজ করা উচিত

সম্পাদনা : ফিক্সড বাগ @bdukes দ্বারা নির্দেশিত

সম্পাদনা :

আচরণ একটি ব্যাখ্যা জন্য, oldBegin, oldEnd, এবং newBeginহয় Dateদৃষ্টান্ত। অপারেটরদের কলিং +এবং -জাভাস্ক্রিপ্ট অটো কাস্টিং ট্রিগার করবে এবং স্বয়ংক্রিয়ভাবে valueOf()এই বিষয়গুলির প্রোটোটাইপ পদ্ধতিতে কল করবে । এটি ঘটে যে valueOf()পদ্ধতিটি Dateকল হিসাবে কল হিসাবে বস্তুটিতে প্রয়োগ করা হয়েছে getTime()

সুতরাং মূলত: date.getTime() === date.valueOf() === (0 + date) === (+date)


.GetTime () এর কাজ করার জন্য কী ফর্ম্যাটটি প্রয়োজন ... উদাহরণস্বরূপ - নতুন তারিখ ('22 -12-2012 00:00 ')। getTime () কাজ করবে না ... কোন ধারণা?
Jimmyt1988

1
জেএসে তারিখ বিশদকরণের জন্য, আমি আপনাকে এই প্রশ্নের সন্ধান করার পরামর্শ দিচ্ছি: স্ট্যাকওভারফ্লো
ভিনসেন্ট রবার্ট

8
ওল্ডব্যাগিন, ওল্ডএন্ড এবং নিউবেইনকে Dateকী বস্তু বলে মনে করা হচ্ছে ? ভেরিয়েবলের ঘোষণাটি এখানে বাদ দেওয়া হওয়ায় তারা কোন ধরণের অবজেক্ট বলে মনে করছেন তা বলা শক্ত।
অ্যান্ডারসন সবুজ

এছাড়াও, জাভাস্ক্রিপ্টে আপনি তারিখগুলি যোগ বা বিয়োগ করতে ব্যবহার করতে পারেন এমন একটি ফাংশন রয়েছে: stackoverflow.com/a/1214753/975097
এন্ডারসন গ্রিন

সংখ্যা এবং দিন যোগ করার বিষয়ে সতর্কতা অবলম্বন করুন। ব্যাখ্যার জন্য নীচে আমার উত্তর দেখুন
ড্যান

24

জাভাস্ক্রিপ্ট পুরোপুরি বাক্সের বাইরে তারিখের পার্থক্য সমর্থন করে

var msMinute = 60*1000, 
    msDay = 60*60*24*1000,
    a = new Date(2012, 2, 12, 23, 59, 59),
    b = new Date("2013 march 12");


console.log(Math.floor((b - a) / msDay) + ' full days between');
console.log(Math.floor(((b - a) % msDay) / msMinute) + ' full minutes between');

এখন কিছু সমস্যা। এটা চেষ্টা কর:

console.log(a - 10);
console.log(a + 10);

সুতরাং আপনার যদি একটি নম্বর এবং তারিখ যুক্ত করার ঝুঁকি থাকে তবে ডেটকে numberসরাসরি রূপান্তর করুন ।

console.log(a.getTime() - 10);
console.log(a.getTime() + 10);

আমার প্রথম উদাহরণ উদাহরণস্বরূপ তারিখের শক্তিটি প্রদর্শন করে তবে এটি আসলে টাইম বোমা হিসাবে উপস্থিত হয়


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

5
"ক্ষতি" প্রকৃতপক্ষে ভাষা নির্দিষ্টকরণের উপর ভিত্তি করে খেলাপি। বিয়োগ অপারেটরটি -আর্গুমেন্টগুলিকে সংখ্যায় জোর করে, তাই তারিখটি তার সময় মানটি দেয়। +অপারেটর ওভারলোড হয়, তাই উপরন্তু নম্বর বা সংযুক্তকরণের জন্য বলপ্রয়োগ করতে পারে। যেহেতু তারিখগুলি স্ট্রিংয়ের জন্য এই ক্ষেত্রে বাধ্য করে, +তা জোর করে। বিভ্রান্তি ডেট অবজেক্টের দোষ নয়, তবে ওভারলোডিং অপারেটরদের।
রবজি

9

জেএসফিডাল ডেমো দেখুন

    var date1 = new Date();    
    var date2 = new Date("2025/07/30 21:59:00");
    //Customise date2 for your required future time

    showDiff();

function showDiff(date1, date2){

    var diff = (date2 - date1)/1000;
    diff = Math.abs(Math.floor(diff));

    var days = Math.floor(diff/(24*60*60));
    var leftSec = diff - days * 24*60*60;

    var hrs = Math.floor(leftSec/(60*60));
    var leftSec = leftSec - hrs * 60*60;

    var min = Math.floor(leftSec/(60));
    var leftSec = leftSec - min * 60;

    document.getElementById("showTime").innerHTML = "You have " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds before death.";

setTimeout(showDiff,1000);
}

আপনার এইচটিএমএল কোডের জন্য:

<div id="showTime"></div>

4

আপনি যদি সময়ের উপাদানটির বিষয়ে চিন্তা না করেন তবে আপনি .getDate()এবং ব্যবহার করতে পারেন.setDate() কেবল তারিখের অংশটি সেট ।

সুতরাং আপনার শুরুর তারিখের 2 সপ্তাহ পরে আপনার শেষের তারিখটি সেট করতে, এই জাতীয় কিছু করুন:

function GetEndDate(startDate)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate()+14);
    return endDate;
}

দুটি তারিখের মধ্যে পার্থক্য (দিনগুলিতে) ফিরিয়ে দিতে, এটি করুন:

function GetDateDiff(startDate, endDate)
{
    return endDate.getDate() - startDate.getDate();
}

অবশেষে, আসুন প্রথম ফাংশনটি পরিবর্তন করুন যাতে এটি প্যারামিটার হিসাবে ২ য় দ্বারা ফিরে আসা মানটি নিতে পারে:

function GetEndDate(startDate, days)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate() + days);
    return endDate;
}

31
GetDateDiff()মাস বাধা অতিক্রম করবে। উদাহরণস্বরূপ, 2011/04/26 এবং 2011/05/01 ফিরে আসবে -25, তবে অফসেটটি 5 দিনের হওয়া উচিত।
এনএফএম

var ds = নতুন তারিখ (2014, 0, 31, 0, 0, 0, 0); var de = নতুন তারিখ (2014, 2, 31, 0, 0, 0, 0); গেটডেটডিফ (ডিএস, ডি) 0
নূর

3

ধন্যবাদ @ ভিনসেন্ট রবার্ট , আমি আপনার মূল উদাহরণটি ব্যবহার করে শেষ করেছি, যদিও এটি আসলে newBegin + oldEnd - oldBegin। সরলীকৃত শেষ সমাধান এখানে:

    // don't update end date if there's already an end date but not an old start date
    if (!oldEnd || oldBegin) {
        var selectedDateSpan = 1800000; // 30 minutes
        if (oldEnd) {
            selectedDateSpan = oldEnd - oldBegin;
        }

       newEnd = new Date(newBegin.getTime() + selectedDateSpan));
    }

1
আপনি কেন কখনও কখনও ব্যবহার করছেন getTimeএবং কখনও কখনও ব্যবহার করছেন না তা
ড্যান

2

আপনার প্রয়োজনের উপর নির্ভর করে, এই ফাংশনটি 2 দিনের মধ্যে পার্থক্য গণনা করবে এবং দশমিক দশমিক এক ফলস্বরূপ ফল দেবে।

// This one returns a signed decimal. The sign indicates past or future.

this.getDateDiff = function(date1, date2) {
    return (date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24);
}

// This one always returns a positive decimal. (Suggested by Koen below)

this.getDateDiff = function(date1, date2) {
    return Math.abs((date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24));
}

1
এটিকে একটি Math.abs()কলে রাখুন এবং আপনি সর্বদা একটি ইতিবাচক দশমিক পাবেন।
কোয়েন

1
ভাল পরামর্শ কোয়েন। এটি লোকেদের 2 টি বিকল্প দেয়: আপনার পরামর্শ অনুসারে ঠিক আসল তারিখের পার্থক্য রয়েছে, বা চিহ্নটি একটি তারিখ সহ যা পার্থক্য অতীত বা ভবিষ্যতে কিনা তা নির্দেশ করে। :)
স্পার্কস্পাইডার

দয়া করে নোট করুন যে জাভাস্ক্রিপ্টে আপনি date.getTime()ভবিষ্যতে / অতীতে সময় পেতে মিশিসেকেন্ডে একটি সংখ্যা যুক্ত / বিয়োগ করতে পারেন । next var nextMinute = নতুন তারিখ (someDate.getTime () + 60 * 1000);
ড্যান

এটি একটি টাইপো? "২ দিনের মধ্যে"। সম্ভবত 2 তারিখের মধ্যে।
তোমাজাহলিন

2

Moment.js ব্যবহার করে, একটি সহজ সমাধান রয়েছে, যা আপনাকে কোডের একক লাইনে দিনের মধ্যে পার্থক্য দেবে।

moment(endDate).diff(moment(beginDate), 'days');

অতিরিক্ত বিবরণ পাওয়া যাবে moment.js পৃষ্ঠায়

চিয়ার্স, মিগুয়েল


1
function compare()
{
  var end_actual_time    = $('#date3').val();

  start_actual_time = new Date();
  end_actual_time = new Date(end_actual_time);

  var diff = end_actual_time-start_actual_time;

  var diffSeconds = diff/1000;
  var HH = Math.floor(diffSeconds/3600);
  var MM = Math.floor(diffSeconds%3600)/60;

  var formatted = ((HH < 10)?("0" + HH):HH) + ":" + ((MM < 10)?("0" + MM):MM)
  getTime(diffSeconds);
}
function getTime(seconds) {
  var days = Math.floor(leftover / 86400);

  //how many seconds are left
  leftover = leftover - (days * 86400);

  //how many full hours fits in the amount of leftover seconds
  var hours = Math.floor(leftover / 3600);

  //how many seconds are left
  leftover = leftover - (hours * 3600);

  //how many minutes fits in the amount of leftover seconds
  var minutes = leftover / 60;

  //how many seconds are left
  //leftover = leftover - (minutes * 60);
  alert(days + ':' + hours + ':' + minutes);
}

1

বিকল্প পরিবর্তনের বর্ধিত কোড ..

http://jsfiddle.net/vvGPQ/48/

showDiff();

function showDiff(){
var date1 = new Date("2013/01/18 06:59:00");   
var date2 = new Date();
//Customise date2 for your required future time

var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));

var years = Math.floor(diff/(365*24*60*60));
var leftSec = diff - years * 365*24*60*60;

var month = Math.floor(leftSec/((365/12)*24*60*60));
var leftSec = leftSec - month * (365/12)*24*60*60;    

var days = Math.floor(leftSec/(24*60*60));
var leftSec = leftSec - days * 24*60*60;

var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;

var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;




document.getElementById("showTime").innerHTML = "You have " + years + " years "+ month + " month " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds the life time has passed.";

setTimeout(showDiff,1000);
}

আপনার উত্তরে আরও ব্যাখ্যা যুক্ত করুন এবং আরও ভাল ইংরেজি ব্যবহার করুন।
ফান্ড মনিকার লকসুইট

এই সমাধানটি ভুল কারণ আপনি লিপ বছর অবহেলা করে 365 দিন ব্যবহার করেন।
সের্গেই গলিনি

0
function checkdate() {
    var indate = new Date()
    indate.setDate(dat)
    indate.setMonth(mon - 1)
    indate.setFullYear(year)

    var one_day = 1000 * 60 * 60 * 24
    var diff = Math.ceil((indate.getTime() - now.getTime()) / (one_day))
    var str = diff + " days are remaining.."
    document.getElementById('print').innerHTML = str.fontcolor('blue')
}

0
<html>
<head>
<script>
function dayDiff()
{
     var start = document.getElementById("datepicker").value;
     var end= document.getElementById("date_picker").value;
     var oneDay = 24*60*60*1000; 
     var firstDate = new Date(start);
     var secondDate = new Date(end);    
     var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
    document.getElementById("leave").value =diffDays ;
 }
</script>
</head>
<body>
<input type="text" name="datepicker"value=""/>
<input type="text" name="date_picker" onclick="function dayDiff()" value=""/>
<input type="text" name="leave" value=""/>
</body>
</html>

0

এই কোডটি অধ্যয়ন বছরের সময়কাল পূরণ করে যখন আপনি অধ্যয়নের শুরু তারিখ এবং শেষের তারিখ (অর্জনের তারিখের যোগ্যতা অর্জন করেন) এবং এক বছরের চেয়ে কম সময়কাল কিনা তা যাচাই করে নিন যদি হ্যাঁ সতর্কতাটি মনে রাখে সেখানে তিনটি ইনপুট উপাদান থাকে txtFromQualifDateএবং দ্বিতীয় txtQualifDateএবং তৃতীয়txtStudyYears

এটি ভগ্নাংশের সাথে বছরের সংখ্যার ফলাফল প্রদর্শন করবে

function getStudyYears()
    {
        if(document.getElementById('txtFromQualifDate').value != '' && document.getElementById('txtQualifDate').value != '')
        {
            var d1 = document.getElementById('txtFromQualifDate').value;

            var d2 = document.getElementById('txtQualifDate').value;

            var one_day=1000*60*60*24;

            var x = d1.split("/");
            var y = d2.split("/");

            var date1=new Date(x[2],(x[1]-1),x[0]);

            var date2=new Date(y[2],(y[1]-1),y[0])

            var dDays = (date2.getTime()-date1.getTime())/one_day;

            if(dDays < 365)
            {
                alert("the date between start study and graduate must not be less than a year !");

                document.getElementById('txtQualifDate').value = "";
                document.getElementById('txtStudyYears').value = "";

                return ;
            }

            var dMonths = Math.ceil(dDays / 30);

            var dYears = Math.floor(dMonths /12) + "." + dMonths % 12;

            document.getElementById('txtStudyYears').value = dYears;
        }
    }

1
বছরের সন্ধানের জন্য কখনই তারিখের স্ট্রিংকে বিশ্লেষণ করবেন না কারণ ব্রাউজারগুলির মধ্যে স্ট্রিং উপস্থিতি (উদাহরণস্বরূপ বিভাজক) পৃথক। ব্যবহারের getFullYearযা যে জন্য পরিকল্পনা করা হয়েছিল। ------- গুগলকোডে ডেটজেস লাইব্রেরি দেখুন যা সম্ভবত বেশিরভাগ কোণার ক্ষেত্রে সমর্থন করে
ড্যান

@ ড্যানের পরামর্শের জন্য ধন্যবাদ তবে এটি আমার জন্য বাস্তব সরকার প্রকল্পের (বিভিন্ন ব্রাউজার) কাজ করেছে এবং পরীক্ষা করেছে এটি কি দুর্বল প্রোগ্রামিং প্র্যাকটিভ? :)
শরীফ

0

আপনি যদি তারিখের অবজেক্টগুলি ব্যবহার করেন এবং তারপরে getTime()উভয় তারিখের জন্য ফাংশনটি ব্যবহার করেন এটি আপনাকে জানুয়ারি 1, 1970 এর পরে একটি সংখ্যার মান হিসাবে তাদের নিজ নিজ সময় দেবে। তারপরে আপনি এই সংখ্যার মধ্যে পার্থক্য পেতে পারেন।

যদি এটি আপনাকে সহায়তা না করে তবে সম্পূর্ণ ডকুমেন্টেশনটি দেখুন: http://www.w3schools.com/jsref/jsref_obj_date.asp


ওঁ, হ্যাঁ, খেয়াল করেনি, এর নীচের উত্তরগুলি সর্বাধিক অর্ধ বছরের পুরানো।
কোয়েন

0

কোডের নীচে আজ থেকে ফিউচার তারিখের বাকি দিনগুলি ফিরে আসবে।

নির্ভরতা: jQuery এবং গতিবেগ।

var getDaysLeft = function (date) {
  var today = new Date();
  var daysLeftInMilliSec = Math.abs(new Date(moment(today).format('YYYY-MM-DD')) - new Date(date));
  var daysLeft = daysLeftInMilliSec / (1000 * 60 * 60 * 24);   
  return daysLeft;
};

getDaysLeft('YYYY-MM-DD');

0
var getDaysLeft = function (date1, date2) {
   var daysDiffInMilliSec = Math.abs(new Date(date1) - new Date(date2));
   var daysLeft = daysDiffInMilliSec / (1000 * 60 * 60 * 24);   
   return daysLeft;
};
var date1='2018-05-18';
var date2='2018-05-25';
var dateDiff = getDaysLeft(date1, date2);
console.log(dateDiff);

0

এটি আমার সিস্টেমে যা ছিল তা।

var startTime=("08:00:00").split(":");
var endTime=("16:00:00").split(":");
var HoursInMinutes=((parseInt(endTime[0])*60)+parseInt(endTime[1]))-((parseInt(startTime[0])*60)+parseInt(startTime[1]));
console.log(HoursInMinutes/60);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.