Moment.js - আমি কিভাবে তারিখের পর থেকে সংখ্যাগুলি পেতে পারি না, এটি গোল হয় নি?


130

আমি ব্যবহার একজন ব্যক্তির বয়স নিরূপণ করার চেষ্টা করছি Moment.js , কিন্তু আমি খুঁজে বের করছি যা অন্যথায় দরকারী fromNow বছর পর্যন্ত পদ্ধতি চক্রের। উদাহরণস্বরূপ, যদি আজ 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
এই কৌশলটি @ এবেলট্রানের উত্তরের দ্বারা আচ্ছাদিত, এবং ভগ্নাংশের মূল্যবোধ নিয়ে আপনার আলোচনার সাথে প্রশ্নটির কোনও যোগসূত্র নেই। আমি বরং এটি একটি মন্তব্য হিসাবে যুক্ত করব।
aknuds1

21

একটি পার্থক্য ফাংশন বলে মনে হচ্ছে যা সময় ব্যবধানগুলি ব্যবহারের পাশাপাশি ফলাফলকে গোল না করার একটি বিকল্প গ্রহণ করে। সুতরাং, মত কিছু

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

আমি এটি চেষ্টা করে দেখিনি, এবং আমি মুহুর্তের সাথে পুরোপুরি পরিচিত নই, তবে মনে হচ্ছে এটি আপনার যা চান তা পাওয়া উচিত (মাসটি পুনরায় সেট না করেই)।


এই দৃশ্যের জন্য আপনাকে মুহূর্ত থেকে ভাসমান পয়েন্ট নম্বরটি গ্রহণ করার প্রয়োজন হবে না এবং তারপরে নিজেই এটির চারপাশে লাগানোর দরকার নেই। দেখে মনে হচ্ছে মুহূর্তটি ডিফ ব্যবহার করে বছরের গণনার জন্য ফলাফলটি সঠিকভাবে গোল করছে।
ক্রিস

31
ডক্স থেকে, 2.0.0 যেহেতু, মুহূর্তে # পরিবর্তন ফিরে আসবে সংখ্যা নিচে, বৃত্তাকার যাতে আপনি শুধুমাত্র প্রয়োজন: age = moment().diff(birthDate, 'years')
সুপারস্কঙ্ক

13

আমি দেখতে পেয়েছি যে এটি উভয় তারিখের জন্য জানুয়ারিতে মাসের পুনরায় সেট করার জন্য কাজ করবে (প্রদত্ত তারিখ এবং বর্তমান):

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

3
Moment.js v2.3.1 এ একটি .fromNow () পদ্ধতি রয়েছে যা সহায়কও হতে পারে।
লুকাস লাজারো

9

এই পদ্ধতিটি সহজ এবং শক্তিশালী।

মান একটি তারিখ এবং "ডিডি-এমএম-ওয়াইওয়াইওয়াই" তারিখের মুখোশ।

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

৩5৫.২৫ ব্যবহার করা একটি আনুমানিক যা কান্নায় শেষ হতে 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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.