মোমেন্ট জেএস-এ দুটি তারিখের মধ্যে ঘন্টার পার্থক্য পান


385

আমি নিম্নরূপে মোমেন্টজ ব্যবহার করে দুটি তারিখের মধ্যে পার্থক্য পেতে সক্ষম হয়েছি:

moment(end.diff(startTime)).format("m[m] s[s]")

তবে, আমি প্রযোজ্য সময়টি কেবল তখনই প্রদর্শন করতে চাই (কেবল যখন = = 60 মিনিট সময় কেটে যায়)।

যাইহোক, যখন আমি নিম্নলিখিতগুলি ব্যবহার করে সময়কাল পুনরুদ্ধার করার চেষ্টা করি:

var duration = moment.duration(end.diff(startTime));
var hours = duration.hours();

এটি দুটি তারিখের মধ্যে ঘন্টার সংখ্যা নয়, বর্তমান সময়টি ফিরিয়ে দিচ্ছে।

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

উত্তর:


611

আপনি বন্ধ ছিল. আপনাকে কেবল duration.asHours()পদ্ধতিটি ব্যবহার করতে হবে ( দস্তাবেজগুলি দেখুন )।

var duration = moment.duration(end.diff(startTime));
var hours = duration.asHours();

8
এটা করা উচিত নয় startTime.diff(end, 'hours', true);? সময়কাল.আস ঘন্টাস (); এটি 25 ঘন্টা আগে হলে 1 ফিরে আসত।
ড্যানিয়েল এফ

29
@ ড্যানিয়েলএফ আপনি মোমেন্টজেএস> = সংস্করণ ২.০.০ ব্যবহার করছেন, আপনি .diff()হ্যাঁ ব্যবহার করতে পারেন । এটি ব্যতীত end.diff(startTime, 'hours', true)ধনাত্মক সংখ্যা হিসাবে ঘন্টার সংখ্যা পাওয়া। তবে আপনার দ্বিতীয় বিষয়টি সঠিক নয়। duration.hours()এটি 25 ঘন্টা আগে 1 হলে ফিরে আসত তবে 25 duration.asHours()ফিরে আসবে
গ্রেগএল

5
@ গ্রেগল আমি সংশোধন করেছি jsfiddle.net/qxxr1Lyr আমি অবশ্যই ভুল করে .hours()লক্ষ্য না করেই এই পদ্ধতিটি ব্যবহার করেছি ।
ড্যানিয়েল এফ

5
এটি কীভাবে এত বেশি ভোট দেয় যখন সমস্ত কিছুই ওপিকে কোনও টাইপ সম্পর্কে সচেতন করে তোলে যা বেশিরভাগ IDE আপনাকে যেভাবেই প্রকাশ করতে পারে ( imgur.com/a/ikyayIL )। এসও রেপ প্রথমে সেরা পোশাক পরে অন্যরা স্ক্র্যাপ এসএমএচের জন্য কাজ করেন। ওহ আপনি একটি টাইপ ঠিক করেছেন .. এখানে 7.7 ক রেপ
anderাকান্দারওয়ালা

3
@ জেন্ডারওয়ার আমি আপনার হতাশাকে বুঝতে পারি, তবে এটি একটি 5 বছরের পুরানো প্রশ্ন। আজ এই জাতীয় প্রশ্ন ও উত্তরগুলি উড়বে না।
জিন-ফ্রান্সোইস ফ্যাব্রে

218

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

var now = moment(new Date()); //todays date
var end = moment("2015-12-1"); // another date
var duration = moment.duration(now.diff(end));
var days = duration.asDays();
console.log(days)

61
কমপক্ষে তার কোড ব্লকটি সমস্ত চলকগুলি প্রদর্শিত হয়েছিল যা গ্রহণযোগ্য উত্তর বা প্রশ্নের বিপরীতে ব্যবহৃত হয়েছিল। যদি কেউ তাদের ভোট কমিয়ে দিতে চায় তবে প্রশ্নটি নীচে ছেড়ে দেওয়া উচিত কারণ এটি শুরু করা অসম্পূর্ণ কোড ব্লক। সেই কোড ব্লকের কি সত্যিই ব্যাখ্যা দরকার?
জর্দান পাপালেও

23
উপরের স্বীকৃত উত্তরের চেয়ে আমার এই উত্তরটি যথেষ্ট পরিস্কার এবং এমনকি আরও পরিপূর্ণ, আপনি জানেন না যে 'শেষ' এবং 'স্টার্টটাইম' কোথা থেকে এসেছে ... আপনার উত্তরের জন্য অনেক ধন্যবাদ রাজ!
পিয়েরে

3
এখনই আসাটা একটু সহজ var now = moment();। দেখুন momentjs.com/docs/#/parsing/now
rob3c

161

অথবা আপনি সহজভাবে করতে পারেন:

var a = moment('2016-06-06T21:03:55');//now
var b = moment('2016-05-06T20:03:55');

console.log(a.diff(b, 'minutes')) // 44700
console.log(a.diff(b, 'hours')) // 745
console.log(a.diff(b, 'days')) // 31
console.log(a.diff(b, 'weeks')) // 4

ডক্স: এখানে


11
আমি কীভাবে একসাথে সমস্ত ঘন্টা, মিনিট এবং সেকেন্ড দেখাতে পারি? এইচ এইচ: এমএম: এসএসের মতো?
ফয়জান সাইয়েদ

16

আপনাকে যা করতে হবে তা হল hoursদ্বিতীয় প্যারামিটার হিসাবে মুহুর্তগুলি পৃথক করে ফাংশনে।

var a = moment([21,30,00], "HH:mm:ss")
var b = moment([09,30,00], "HH:mm:ss")
a.diff(b, 'hours') // 12

দস্তাবেজ: https://momentjs.com/docs/#/displaying/differences/

উদাহরণ:

const dateFormat = "YYYY-MM-DD HH:mm:ss";
// Get your start and end date/times
const rightNow = moment().format(dateFormat);
const thisTimeYesterday = moment().subtract(1, 'days').format(dateFormat);
// pass in hours as the second parameter to the diff function
const differenceInHours = moment(rightNow).diff(thisTimeYesterday, 'hours');

console.log(`${differenceInHours} hours have passed since this time yesterday`);
<script 
  src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js">
</script>


12

একটি দুর্দান্ত momentপদ্ধতি বলা হয়ে থাকে fromNow()যা একটি নির্দিষ্ট সময় থেকে সুন্দর মানব পাঠযোগ্য ফর্মের মধ্যে এই সময়টি ফিরিয়ে দেয়:

moment('2019-04-30T07:30:53.000Z').fromNow() // an hour ago || a day ago || 10 days ago

অথবা আপনি যদি চান যে দুটি নির্দিষ্ট তারিখের মধ্যে আপনি ব্যবহার করতে পারেন:

var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b); // "a day ago"

ডক্স থেকে নেওয়া:


7

আমি জানি এটি পুরানো, তবে এখানে একটি লাইন সমাধান রয়েছে:

const hourDiff = start.diff(end, "hours");

যেখানে শুরু এবং শেষ মুহুর্তের অবজেক্ট।

উপভোগ করুন!


... ইতিমধ্যে 2016 সালে সেবাস্তিয়ান লারা প্রস্তাবিত
ইয়াকভল

2
 var start=moment(1541243900000);
 var end=moment(1541243942882);
 var duration = moment.duration(end.diff(startTime));
 var hours = duration.asHours();

আপনি দেখতে পাচ্ছেন যে, এই পদ্ধতির কাজ করার জন্য শুরু এবং শেষের তারিখটি মুহূর্তের অবজেক্ট হওয়া দরকার।


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

1
var __startTime = moment("2016-06-06T09:00").format();
var __endTime = moment("2016-06-06T21:00").format();

var __duration = moment.duration(moment(__endTime).diff(__startTime));
var __hours = __duration.asHours();
console.log(__hours);

2
মুহুর্তের স্ট্রিং উপস্থাপনা থেকে / এ স্ট্রিং উপস্থাপনা থেকে সমস্ত অপ্রয়োজনীয় রূপান্তরগুলি সরিয়ে ফেলুন এবং আপনি গৃহীত উত্তরের সাথে শেষ হবেন।
ভ্লাদিমির এম

1
পরিবর্তনশীল নামের শুরুতে অতিরিক্ত আন্ডারস্কোরগুলি কেন?
zenw0lf

1

আমার ক্ষেত্রে, আমি ঘন্টা এবং মিনিট চেয়েছিলাম:

var duration = moment.duration(end.diff(startTime));
var hours = duration.hours(); //hours instead of asHours
var minutes = duration.minutes(); //minutes instead of asMinutes

আরও তথ্যের জন্য সরকারী দস্তাবেজ দেখুন


0

আপনি যদি নীচে কোডের চেয়ে মে দিনের তুলনায় দুটি তারিখের মধ্যে মোট মিনিট চান তবে আপনাকে সূচনা করার তারিখ: 2018-05-04 02:08:05 , শেষ তারিখ: 2018-05-14 09:04:07 ...

function countDaysAndTimes(startDate,endDate){
return new Promise(function (resolve, reject) {
var dayObj = new Object;
var finalArray = new Array;

var datetime1 = moment(startDate);
var datetime2 = moment(endDate);
if(datetime1.format('D') != datetime2.format('D') || datetime1.format('M') != datetime2.format('M') ||  datetime1.format('YYYY') != datetime2.format('YYYY')){
  var onlyDate1 = startDate.split(" ");
  var onlyDate2 = endDate.split(" ");
  var totalDays = moment(onlyDate2[0]).diff(moment(onlyDate1[0]), 'days')

  // First Day Entry
  dayObj.startDate = startDate;
  dayObj.endDate = moment(onlyDate1[0]).add(1, 'day').format('YYYY-MM-DD')+" 00:00:00";
  dayObj.minutes = moment(dayObj.endDate).diff(moment(dayObj.startDate), 'minutes');
  finalArray.push(dayObj);

  // Between Days Entry
  var i = 1;
  if(totalDays > 1){
    for(i=1; i<totalDays; i++){
      var dayObj1 = new Object;
      dayObj1.startDate = moment(onlyDate1[0]).add(i, 'day').format('YYYY-MM-DD')+" 00:00:00";
      dayObj1.endDate = moment(onlyDate1[0]).add(i+1, 'day').format('YYYY-MM-DD')+" 00:00:00";
      dayObj1.minutes = moment(dayObj1.endDate).diff(moment(dayObj1.startDate), 'minutes');
      finalArray.push(dayObj1);
    }
  }

  // Last Day Entry
  var dayObj2 = new Object;
  dayObj2.startDate = moment(onlyDate1[0]).add(i, 'day').format('YYYY-MM-DD')+" 00:00:00";
  dayObj2.endDate = endDate ;
  dayObj2.minutes = moment(dayObj2.endDate).diff(moment(dayObj2.startDate), 'minutes');
  finalArray.push(dayObj2);

}
else{
  dayObj.startDate = startDate;
  dayObj.endDate = endDate;
  dayObj.minutes = datetime2.diff(datetime1, 'minutes');
  finalArray.push(dayObj);
}
console.log(JSON.stringify(finalArray));
// console.table(finalArray);
resolve(finalArray);
});
}

আউটপুট

 [
  {
  "startDate":"2018-05-04 02:08:05",
  "endDate":"2018-05-05 00:00:00",
  "minutes":1311
  },
  {
  "startDate":"2018-05-05 00:00:00",
  "endDate":"2018-05-06 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-06 00:00:00",
  "endDate":"2018-05-07 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-07 00:00:00",
  "endDate":"2018-05-08 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-08 00:00:00",
  "endDate":"2018-05-09 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-09 00:00:00",
  "endDate":"2018-05-10 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-10 00:00:00",
  "endDate":"2018-05-11 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-11 00:00:00",
  "endDate":"2018-05-12 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-12 00:00:00",
  "endDate":"2018-05-13 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-13 00:00:00",
  "endDate":"2018-05-14 00:00:00",
  "minutes":1440
  },
  {
  "startDate":"2018-05-14 00:00:00",
  "endDate":"2018-05-14 09:04:07",
  "minutes":544
  }
 ]

0

আমি জানি এটি ইতিমধ্যে উত্তর দেওয়া হয়েছে তবে আপনি যদি পুনরাবৃত্ত এবং আরও সাধারণ কিছু চান এবং fromNowআপনি যে মুহূর্তে আমার তৈরি এই ফাংশনটি ব্যবহার করতে পারেন সেই মুহুর্তে নির্ভর না করেন । অবশ্যই আপনি বছর এবং সেকেন্ড সমর্থন করার জন্য এটি আপনার প্রয়োজনের সাথে সামঞ্জস্য করার জন্য এর যুক্তি পরিবর্তন করতে পারেন।

var createdAt = moment('2019-05-13T14:23:00.607Z');
var expiresAt = moment('2019-05-14T14:23:00.563Z');

// You can also add years in the beginning of the array or seconds in its end
const UNITS = ["months", "weeks", "days", "hours", "minutes"]
function getValidFor (createdAt, expiresAt, unit = 'months') {
    const validForUnit = expiresAt.diff(createdAt, unit);
    // you could adjust the if to your needs 
    if (validForUnit > 1 || unit === "minutes") {
    return [validForUnit, unit];
  }
  return getValidFor(createdAt, expiresAt, UNITS[UNITS.indexOf(unit) + 1]);
}

-9
            var timecompare = {
            tstr: "",
            get: function (current_time, startTime, endTime) {
                this.tstr = "";
                var s = current_time.split(":"), t1 = tm1.split(":"), t2 = tm2.split(":"), t1s = Number(t1[0]), t1d = Number(t1[1]), t2s = Number(t2[0]), t2d = Number(t2[1]);

                if (t1s < t2s) {
                    this.t(t1s, t2s);
                }

                if (t1s > t2s) {
                    this.t(t1s, 23);
                    this.t(0, t2s);
                }

                var saat_dk = Number(s[1]);

                if (s[0] == tm1.substring(0, 2) && saat_dk >= t1d)
                    return true;
                if (s[0] == tm2.substring(0, 2) && saat_dk <= t2d)
                    return true;
                if (this.tstr.indexOf(s[0]) != 1 && this.tstr.indexOf(s[0]) != -1 && !(this.tstr.indexOf(s[0]) == this.tstr.length - 2))
                    return true;

                return false;

            },
            t: function (ii, brk) {
                for (var i = 0; i <= 23; i++) {
                    if (i < ii)
                        continue;
                    var s = (i < 10) ? "0" + i : i + "";
                    this.tstr += "," + s;
                    if (brk == i)
                        break;
                }
            }};

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