Moment.js - मुझे डेट के बाद से कितने साल मिलते हैं, गोल नहीं?


130

मैं Moment.js का उपयोग करके किसी व्यक्ति की आयु की गणना करने की कोशिश कर रहा हूं , लेकिन मुझे पता चल रहा है कि अन्यथा विधि सालों से उपयोगी है । उदाहरण के लिए, अगर आज 12/27/2012 है और व्यक्ति की जन्मतिथि 02/26/1978 है, तो moment("02/26/1978", "MM/DD/YYYY").fromNow()'35 साल पहले 'लौटता है। मैं क्षणों की संख्या को कैसे अनदेखा कर सकता हूं, और बस तारीख के बाद वर्षों (यानी 34) की संख्या वापस कर सकता हूं?

जवाबों:



30

http://jsfiddle.net/xR8t5/27/

यदि आप भिन्न मान नहीं चाहते हैं:

var years = moment().diff('1981-01-01', 'years',false);
alert( years);

यदि आप भिन्न मान चाहते हैं:

var years = moment().diff('1981-01-01', 'years',true);
alert( years);

इकाइयां [सेकंड, मिनट, घंटे, दिन, सप्ताह, महीने, वर्ष] हो सकती हैं


3
इस तकनीक को @ ebeltran के उत्तर द्वारा कवर किया गया है, और भिन्नात्मक मूल्यों की आपकी चर्चा का सवाल से कोई लेना-देना नहीं है। मैं इसे टिप्पणी के रूप में जोड़ना चाहूंगा।
एकन्यूड्स 1

21

एक अंतर फ़ंक्शन प्रतीत होता है जो समय अंतराल का उपयोग करता है और साथ ही परिणाम को गोल नहीं करने के लिए एक विकल्प के रूप में स्वीकार करता है । तो, कुछ इस तरह

Math.floor(moment(new Date()).diff(moment("02/26/1978","MM/DD/YYYY"),'years',true)))

मैंने यह कोशिश नहीं की है, और मैं पूरी तरह से क्षण से परिचित नहीं हूं, लेकिन ऐसा लगता है कि आपको यह प्राप्त करना चाहिए (महीने को रीसेट किए बिना)।


ऐसा प्रतीत होता है कि आपको इस क्षण के लिए फ़्लोटिंग पॉइंट नंबर प्राप्त करने की आवश्यकता नहीं है और फिर इसे स्वयं राउंड करें। ऐसा लग रहा है कि पल सही रूप से वर्ष गणना के लिए परिणाम का उपयोग कर रहा है।
क्रिस

31
डॉक्स से, 2.0.0 के बाद से, पल # diff वापस आ जाएगी संख्या नीचे, गोल ताकि आप केवल करने की जरूरत है: age = moment().diff(birthDate, 'years')
सुपरस्कंक

13

मैंने पाया कि यह दोनों तिथियों (प्रदान की गई तारीख और वर्तमान) के लिए जनवरी से जनवरी को रीसेट करने के लिए काम करेगा:

> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0))
"34 years ago"

3
क्षण में .js v2.3.1 एक .fromNow () विधि है जो सहायक भी हो सकती है।
लुकास लजारो

9

यह विधि आसान और शक्तिशाली है।

मूल्य एक तिथि है और "DD-MM-YYYY" तिथि का मुखौटा है।

moment().diff(moment(value, "DD-MM-YYYY"), 'years');

6

इसे इस्तेमाल करे:

 moment("02/26/1978", "MM/DD/YYYY").fromNow().split(" ")[0];

स्पष्टीकरण:

हमें स्ट्रिंग कुछ इस तरह से मिलती है: '23 दिन पहले '। इसे सरणी में विभाजित करें: ['23', 'दिन', 'पहले'] और फिर पहले आइटम '23' को लें।


3
इस पोस्ट को स्वचालित रूप से निम्न गुणवत्ता के रूप में चिह्नित किया जा रहा है क्योंकि यह केवल कोड है। क्या आप यह समझने के लिए कुछ पाठ जोड़कर इसका विस्तार करेंगे कि यह समस्या को हल कैसे करता है?
तैफुन

3

यह विधि मेरे लिए काम करती है। यह जाँच रहा है कि क्या इस वर्ष व्यक्ति का जन्मदिन था और एक वर्ष अन्यथा घटाया गया।

// date is the moment you're calculating the age of
var now = moment().unix();
var then = date.unix();
var diff = (now - then) / (60 * 60 * 24 * 365);
var years = Math.floor(diff);

संपादित करें: पहले संस्करण ने पूरी तरह से काम नहीं किया। अद्यतन किया जाना चाहिए


इसने मेरे लिए काम किया अगर मैंने लीप वर्ष के लिए वर्ष के दिनों को 365.25 में बदल दिया
bschipp

365.25 का उपयोग एक सन्निकटन है जो आँसू में समाप्त हो सकता है - cal 1752यह देखने के लिए कि क्यों
pgee70

2

यदि आप उम्र की गणना के लिए किसी भी मॉड्यूल का उपयोग नहीं करना चाहते हैं

var age = Math.floor((new Date() - new Date(date_of_birth)) / 1000 / 60 / 60 / 24 / 365.25)

2

जब आप वर्ष और शेष दिन दिखाना चाहते हैं:

var m = moment(d.birthday.date, "DD.MM.YYYY");
var years = moment().diff(m, 'years', false);
var days = moment().diff(m.add(years, 'years'), 'days', false);
alert(years + ' years, ' + days + ' days');

0

मैं इस छोटे तरीके को पसंद करता हूं।

function getAgeFromBirthday(birthday) {
    if(birthday){
      var totalMonths = moment().diff(birthday, 'months');
      var years = parseInt(totalMonths / 12);
      var months = totalMonths % 12;
        if(months !== 0){
           return parseFloat(years + '.' + months);
         }
    return years;
      }
    return null;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.