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


246

আমি জানি যে আমি কিছু করতে পারি এবং মুহুর্তগুলির সাথে আরও কিছু vশ্বর্যকর তারিখগুলিও করতে পারি। তবে বিব্রতকরভাবে, এমন কিছু করার চেষ্টা করে যাচ্ছি যা সহজ বলে মনে হচ্ছে: 2 বারের মধ্যে পার্থক্য পেয়েছি।

উদাহরণ:

var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

//expected result:
"00:39:30"

আমি যা চেষ্টা করেছি:

var now = moment("04/09/2013 15:00:00");
var then = moment("04/09/2013 14:20:30");

console.log(moment(moment.duration(now.diff(then))).format("hh:mm:ss"))
//outputs 10:39:30  

সেখানে "10" কি তা আমি বুঝতে পারি না। আমি ব্রাজিলে থাকি, তাই প্রাসঙ্গিক হলে আমরা utc-0300 are

এর ফলাফলটি moment.duration(now.diff(then))সঠিক অভ্যন্তরীণ মানগুলির সাথে একটি সময়কাল হয়:

 days: 0
 hours: 0
 milliseconds: 0
 minutes: 39
 months: 0
 seconds: 30
 years: 0

সুতরাং, আমি অনুমান করি আমার প্রশ্নটি: একটি মুহুর্তের সময়কালকে কীভাবে একটি সময়ের ব্যবধানে রূপান্তর করা যায়? আমি নিশ্চিত ব্যবহার করতে পারেন

duration.get("hours") +":"+ duration.get("minutes") +:+ duration.get("seconds")

তবে আমি অনুভব করি যে এর থেকে আরও মার্জিত কিছু আছে যা আমি পুরোপুরি অনুপস্থিত।


উপরের দিকে তাকিয়ে আপডেট করুন , উপরের উদাহরণটিতে nowহ'ল:

Tue Apr 09 2013 15:00:00 GMT-0300 (E. South America Standard Time)…}

এবং moment(moment.duration(now.diff(then)))হ'ল:

Wed Dec 31 1969 22:39:30 GMT-0200 (E. South America Daylight Time)…}

দ্বিতীয় মানটি কেন ডাইটলাইট টাইমে (-0200) এ আমি নিশ্চিত নই ... তবে আমি নিশ্চিত যে আমি তারিখ পছন্দ করি না :(

আপডেট 2

ভাল, মানটি -২০০০ সম্ভবত কারণ 31/12/1969 এমন একটি তারিখ ছিল যেখানে দিবালোক সময় ব্যবহৃত হচ্ছিল ... তাই এটি।


2
"তবে আমি নিশ্চিত যে আমি তারিখগুলি পছন্দ করি না": পি আপনি কি কখনও পড়েন: nodatime.org/unstable/userguide/trivia.html ?
বরিস ক্যালেন্স

উত্তর:


367

যখন মোট সময়কাল ২৪ ঘণ্টারও কম থাকে তখন এই পদ্ধতিটি কেবলমাত্র কাজ করবে:

var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

moment.utc(moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss")

// outputs: "00:39:30"

আপনার যদি 24 ঘন্টা বা তার বেশি থাকে তবে উপরের পদ্ধতির সাথে ঘন্টাগুলি শূন্যে পুনরায় সেট হবে, সুতরাং এটি আদর্শ নয়।

আপনি যদি 24 ঘন্টা বা তারও বেশি সময়ের জন্য বৈধ প্রতিক্রিয়া পেতে চান, তবে তার পরিবর্তে আপনাকে এই জাতীয় কিছু করতে হবে:

var now  = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");

// outputs: "48:39:30"

নোট করুন যে আমি উত্স সময়টি একটি শর্টকাট হিসাবে ব্যবহার করছি। আপনি টানতে পারেd.minutes() এবংd.seconds() আলাদাভাবে, কিন্তু আপনি তাদের zeropad করতে হবে।

এটি প্রয়োজনীয় কারণ কোনও durationআপত্তি ফর্ম্যাট করার ক্ষমতা বর্তমানে moment.js এ নেই। এটি এখানে অনুরোধ করা হয়েছে । তবে, একটি তৃতীয় পক্ষের প্লাগইন নামক মুহূর্ত-সময়কাল-বিন্যাস বলা হয় যা বিশেষভাবে এই উদ্দেশ্যে:

var now  = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var s = d.format("hh:mm:ss");

// outputs: "48:39:30"

31
@ এইচটিএমএল - আমি স্পষ্টভাবে বলেছি যে এটি 24 ঘন্টা বা তার বেশি সময় ধরে কাজ করবে না।
ম্যাট জনসন-পিন্ট

1
এটি ভাল কাজ করে। momentjs এটি একটি দুর্দান্ত লাইব্রেরি এটি আমার অবাক করে তোলে এর আরও সহজ উপায় নেই তবে সম্ভবত আমি যা করছি তা এত "স্বাভাবিক" নয়। আমার কাছে সম্ভবত 24 ঘন্টাের বেশি সময় থাকবে না তবে যদি এটি ঘটে তবে বিকল্পটি পাওয়া ভাল nice আপনার সাহায্যের জন্য ধন্যবাদ.
লিও

69

আপনার সমস্যাটি মুহুর্তের ফলাফলটি পাস করার মধ্যে রয়েছে (ডিগ্রেশন দেওয়ার আগে) () পুনরায় মুহুর্তে ফিরিয়ে দেওয়া () এটিকে ফরম্যাট করার আগে; মুহূর্তে এর ফলাফল আসে () এটি ইউনিক্সের সাথে সম্পর্কিত সময় হিসাবে ব্যাখ্যা করে inter

এটি আপনি যে ফর্ম্যাটটি সন্ধান করছেন ঠিক তা দেয় না, তবে

moment.duration(now.diff(then)).humanize()

আপনাকে "40 মিনিট" এর মতো দরকারী ফর্ম্যাট দেবে। আপনি যদি সেই নির্দিষ্ট ফর্ম্যাটিংয়ের বিষয়ে সত্যিই আগ্রহী হন তবে আপনাকে নিজেরাই একটি নতুন স্ট্রিং তৈরি করতে হবে। একটি সস্তা উপায় হবে

[diff.asHours(), diff.minutes(), diff.seconds()].join(':')

যেখানে var diff = moment.duration(now.diff(then))। এটি আপনাকে একক অঙ্কের মানগুলিতে শূন্য-প্যাডিং দেয় না। তার জন্য, আপনি আন্ডারস্কোর. স্ট্রিংয়ের মতো কিছু বিবেচনা করতে চাইতে পারেন - যদিও এটি মনে হয় বেশ কয়েকটি অতিরিক্ত শূন্যের জন্য যেতে অনেক দীর্ঘ পথ। :)


4
এর asHoursপরিবর্তে আপনাকে ব্যবহার করতে হবে hoursএবং দশমিকগুলি টানতে হবে। অন্যথায় এটি একই সমস্যা হবে আপনি আমার উত্তরটি পেয়েছিলেন। :)
ম্যাট জনসন-পিন্ট

হিউম্যানাইজ () একটি চমৎকার স্পর্শ দেয় তবে আমি ম্যাট পরামর্শ ব্যবহার করে শেষ করেছি। বখশিশের জন্য ধন্যবাদ.
লিও

এটি নির্দেশ করার জন্য ধন্যবাদ, @ ম্যাটজহানসন - আমি বুঝতেও পারি নি। কয়েক ঘন্টা এবং। ঘন্টা আলাদা ছিল, ভেবেছিলাম একটি অন্যটির জন্য কেবল একটি ছোট নাম, তবে কাছাকাছি পরিদর্শন করার সময় আপনি সঠিক।
টিএমএল

2
দ্রষ্টব্য, ব্যবহার করা বুদ্ধিমানের কাজ হবে: [Math.floor(diff.asHours()), diff.minutes(), diff.seconds()].join(':')পছন্দসই ফলাফল পাওয়ার জন্য। প্রথম অংশে দশমিক ছাড়াই
কাইলিম

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

আমার জন্য কাজ করেছেন

Http://momentjs.com/docs/#/displaying/differences/ এ আরও দেখুন


3
এটি কেবল তারিখের জন্য কাজ করে। ওপি সময় পার্থক্য রাখতে চেয়েছিল
এপিএফজেড

এটি সবচেয়ে সহজ সমাধান যা কাজ করে। হ্যাঁ, টাইমস্ট্যাম্পগুলির সাথেও।
ফাহিম

30

আপনি যদি দুটি টাইমস্ট্যাম্পের পার্থক্য চান কেবলমাত্র মাস, বছর নয়, কেবল মোট দিন, ঘন্টা এবং মিনিটের মধ্যে।

var now  = "01/08/2016 15:00:00";
var then = "04/02/2016 14:20:30";
var diff = moment.duration(moment(then).diff(moment(now)));

ডিফের মধ্যে 2 মাস, 23 দিন, 23 ঘন্টা এবং 20 মিনিট রয়েছে। তবে কেবলমাত্র দিন, ঘন্টা এবং মিনিটের মধ্যে আমাদের ফলাফল প্রয়োজন তাই সহজ সমাধানটি হ'ল:

var days = parseInt(diff.asDays()); //84

var hours = parseInt(diff.asHours()); //2039 hours, but it gives total hours in given miliseconds which is not expacted.

hours = hours - days*24;  // 23 hours

var minutes = parseInt(diff.asMinutes()); //122360 minutes,but it gives total minutes in given miliseconds which is not expacted.

minutes = minutes - (days*24*60 + hours*60); //20 minutes.

চূড়ান্ত ফলাফলটি হবে: 84 দিন, 23 ঘন্টা, 20 মিনিট।


19

আপনি যখন কল করবেন diff, moment.js মিলিসেকেন্ডের মধ্যে পার্থক্য গণনা করে। যদি মিলিসেকেন্ডগুলি পাস করা হয় তবে durationএটি সময়কাল গণনা করতে ব্যবহৃত হয় যা সঠিক। যাহোক. আপনি যখন একই মিলি সেকেন্ডে পাস করেন moment(), এটি পর্ব / ইউনিক্স সময় 1 জানুয়ারি, 1970 (মধ্যরাত ইউটিসি / জিএমটি) থেকে মিলি সেকেন্ডের তারিখ গণনা করে। এই কারণেই আপনি ভুল সময় সহ একত্রে 1969 পান।

duration.get("hours") +":"+ duration.get("minutes") +":"+ duration.get("seconds")

সুতরাং, আমি মনে করি আপনার এইটি করা উচিত যেহেতু moment.js formatসময়কালের জন্য ফাংশন দেয় না । অথবা আপনি এটিকে সহজ / প্রাকটিয়ার করার জন্য একটি সাধারণ মোড়ক লিখতে পারেন।


11

এটি ভাল কাজ করা উচিত।

var now  = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);

console.log(d.days(), d.hours(), d.minutes(), d.seconds());

এর চেয়ে ভাল সমাধান! :)
JHenry

সর্বকালের সেরা সমাধান
আলাকসন্দর যীশু জিন

9

আমরা যদি কেবল এইচএইচ: মিমি: এসএস চাই, আমরা এর মতো একটি ফাংশন ব্যবহার করতে পারি:

//param: duration in milliseconds
MillisecondsToTime: function(duration) {
    var seconds = parseInt((duration/1000)%60)
        , minutes = parseInt((duration/(1000*60))%60)
        , hours = parseInt((duration/(1000*60*60))%24)
        , days  = parseInt(duration/(1000*60*60*24));

    var hoursDays = parseInt(days*24);
    hours += hoursDays;
    hours = (hours < 10) ? "0" + hours : hours;
    minutes = (minutes < 10) ? "0" + minutes : minutes;
    seconds = (seconds < 10) ? "0" + seconds : seconds;
    return hours + ":" + minutes + ":" + seconds;
}

4
আমি উত্তর আপনি কোথাও মুহুর্তের ব্যবহার দেখতে পাচ্ছি না।
জোয়েল


3

পরিবর্তে

Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss")

এটা করা ভাল

moment.utc(total.asMilliseconds()).format("HH:mm:ss");

2

ES8 এ মুহুর্তটি ব্যবহার করে, এখন এবং মুহুর্তের অবজেক্ট হওয়া শুরু করুন।

const duration = moment.duration(now.diff(start));
const timespan = duration.get("hours").toString().padStart(2, '0') +":"+ duration.get("minutes").toString().padStart(2, '0') +":"+ duration.get("seconds").toString().padStart(2, '0');

2

ধরণ: নিম্নলিখিতটি কাজ করা উচিত,

export const getTimeBetweenDates = ({
  until,
  format
}: {
  until: number;
  format: 'seconds' | 'minutes' | 'hours' | 'days';
}): number => {
  const date = new Date();
  const remainingTime = new Date(until * 1000);
  const getFrom = moment([date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()]);
  const getUntil = moment([remainingTime.getUTCFullYear(), remainingTime.getUTCMonth(), remainingTime.getUTCDate()]);
  const diff = getUntil.diff(getFrom, format);
  return !isNaN(diff) ? diff : null;
};

0

আমি টাইপস্ক্রিপ্ট সহ একটি সাধারণ ফাংশন তৈরি করি

const diffDuration: moment.Duration = moment.duration(moment('2017-09-04 12:55').diff(moment('2017-09-02 13:26')));
setDiffTimeString(diffDuration);

function setDiffTimeString(diffDuration: moment.Duration) {
  const str = [];
  diffDuration.years() > 0 ? str.push(`${diffDuration.years()} year(s)`) : null;
  diffDuration.months() > 0 ? str.push(`${diffDuration.months()} month(s)`) : null;
  diffDuration.days() > 0 ? str.push(`${diffDuration.days()} day(s)`) : null;
  diffDuration.hours() > 0 ? str.push(`${diffDuration.hours()} hour(s)`) : null;
  diffDuration.minutes() > 0 ? str.push(`${diffDuration.minutes()} minute(s)`) : null;
  console.log(str.join(', '));
} 
// output: 1 day(s), 23 hour(s), 29 minute(s)

জাভাস্ক্রিপ্ট তৈরি করার জন্য https://www.typescriptlang.org/play/index.html


0

InTime = 06: 38, Outtime = 15: 40

 calTimeDifference(){
        this.start = dailyattendance.InTime.split(":");
        this.end = dailyattendance.OutTime.split(":");
        var time1 = ((parseInt(this.start[0]) * 60) + parseInt(this.start[1]))
        var time2 = ((parseInt(this.end[0]) * 60) + parseInt(this.end[1]));
        var time3 = ((time2 - time1) / 60);
        var timeHr = parseInt(""+time3);
        var  timeMin = ((time2 - time1) % 60);
    }

0

তারিখ সময় ভিত্তিক ইনপুট

    var dt1 = new Date("2019-1-8 11:19:16");
    var dt2 = new Date("2019-1-8 11:24:16");


    var diff =(dt2.getTime() - dt1.getTime()) ;
    var hours = Math.floor(diff / (1000 * 60 * 60));
    diff -= hours * (1000 * 60 * 60);
    var mins = Math.floor(diff / (1000 * 60));
    diff -= mins * (1000 * 60);


    var response = {
        status : 200,
        Hour : hours,
        Mins : mins
    }

আউটপুট

{
"status": 200,
"Hour": 0,
"Mins": 5
}

0

মূহুর্ত ব্যবহার করে ইপোক টাইম ডিফারেন্স :

দুটি যুগের মধ্যে পার্থক্য পেতে:

বাক্য গঠন: moment.duration(moment(moment(date1).diff(moment(date2)))).asHours()

ঘন্টা পার্থক্য: moment.duration(moment(moment(1590597744551).diff(moment(1590597909877)))).asHours()

মিনিটের মধ্যে পার্থক্য: moment.duration(moment(moment(1590597744551).diff(moment(1590597909877)))).asMinutes().toFixed()

দ্রষ্টব্য: আপনার .toFixed()যদি সুনির্দিষ্ট মানগুলির প্রয়োজন হয় তবে আপনি মুছে ফেলতে পারেন।

কোড:

const moment = require('moment')

console.log('Date 1',moment(1590597909877).toISOString())
console.log('Date 2',moment(1590597744551).toISOString())
console.log('Date1 - Date 2 time diffrence is : ',moment.duration(moment(moment(1590597909877).diff(moment(1590597744551)))).asMinutes().toFixed()+' minutes')

এখানে কাজের উদাহরণটি দেখুন: https://repl.it/repls/MoccasinDearDimension

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