मोमेंट जेएस में दो तिथियों के बीच घंटे का अंतर प्राप्त करें


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
@ डैनियलएफ यदि आप मोमेंटजेएस> = संस्करण 2.0.0 का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं .diff(), हाँ। सिवाय end.diff(startTime, 'hours', true)एक सकारात्मक संख्या के रूप में घंटों की संख्या प्राप्त करना होगा । हालाँकि, आपका दूसरा बिंदु सही नहीं है। duration.hours()यदि यह 25 घंटे पहले था, तो 1 लौटेगा, लेकिन duration.asHours()25 को लौटेगा।
ग्रेगेल

5
@GregL मैं सही jsfiddle.net/qxxr1Lyr खड़ा हूं, मुझे गलती से नोट .hours()किए बिना विधि का उपयोग करना चाहिए ।
डैनियल एफ

5
इसके पास इतने वोट कैसे हैं जब यह सब करता है कि ओपी को एक टाइपो से अवगत कराएं, जो कि ज्यादातर आईडीई आपको वैसे भी प्रकट करेगा ( imgur.com/a/ikyayIL )। एसओ प्रतिनिधि सबसे अच्छे कपड़े पहने हुए हैं, जबकि अन्य स्क्रैप एसएचएच के लिए काम करते हैं। ओह, आपने एक टाइपो तय किया है .. यहाँ का 4.7k प्रतिनिधि
ज़ैंडर

3
@zanderwar मैं आपकी निराशा को समझता हूं, लेकिन यह एक 5 साल पुराना सवाल है। आज ऐसे सवाल और जवाब नहीं उड़ेंगे।
जीन फ़्राँस्वा Fabre

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();क्षणिकाएं
parsing/

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
मैं एक साथ सभी घंटे, मिनट और सेकंड कैसे दिखा सकता हूं? जैसे HH: MM: SS?
फैजान सैय्यद

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/difference/

उदाहरण:

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
क्या आप केवल कोड पोस्ट करने के बजाय कुछ स्पष्टीकरण जोड़ सकते हैं?
पॉल फ्लॉयड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.