কীভাবে এক্সএক্সএক্সএক্স থেকে স্ট্যাট এক্সচেঞ্জ সাইটের অনুরূপ "4 মিনিট আগে" সময় ফর্ম্যাট করবেন


210

প্রশ্নটি কীভাবে জাভাস্ক্রিপ্টকে Dateস্ট্রিং হিসাবে ফর্ম্যাট করবেন যাতে স্ট্যাক ওভারফ্লোতে প্রদর্শিত সময় আপনি যেমন দেখেন তার সাথে একইভাবে সময় কেটে যায় st

যেমন

  • 1 মিনিট আগে
  • 1 ঘন্টা আগে
  • 1 দিন আগে
  • 1 মাস আগে
  • 1 বছর আগে



এই জন্য দরকারী: Intl.RelativeTimeFormat.prototype.format()
Ван

উত্তর:


324

function timeSince(date) {

  var seconds = Math.floor((new Date() - date) / 1000);

  var interval = Math.floor(seconds / 31536000);

  if (interval > 1) {
    return interval + " years";
  }
  interval = Math.floor(seconds / 2592000);
  if (interval > 1) {
    return interval + " months";
  }
  interval = Math.floor(seconds / 86400);
  if (interval > 1) {
    return interval + " days";
  }
  interval = Math.floor(seconds / 3600);
  if (interval > 1) {
    return interval + " hours";
  }
  interval = Math.floor(seconds / 60);
  if (interval > 1) {
    return interval + " minutes";
  }
  return Math.floor(seconds) + " seconds";
}
var aDay = 24*60*60*1000;
console.log(timeSince(new Date(Date.now()-aDay)));
console.log(timeSince(new Date(Date.now()-aDay*2)));


3
@ হেলো - হ্যাঁ, এক পথে বেরিয়ে আসার এটির গুণাবলী রয়েছে যখন সে পথে না আসে। আজকাল যাঁরা এটি খুব গুরুত্ব সহকারে নেন তারা ম্যাক্সিমের উত্সকে ভুল বুঝে।
স্কাই স্যান্ডার্স

36
ভাল ফাংশন, কিন্তু কিছু মন্তব্য। ইউনিক্স টাইমস্ট্যাম্পগুলির সাথে কাজ করার জন্য প্রথম লাইনটি পরিবর্তিত হয়েছে: var সেকেন্ড = ম্যাথ.ফ্লুর (((নতুন তারিখ ()। গেটটাইম () / 1000) - তারিখ))) work এবং ইনটওয়াল> 1 ইনটুল> = 1 তে পরিবর্তন করা দরকার অন্যথায় এটি 75 মিনিটের মতো জিনিস দেখায় (1 থেকে 2 ঘন্টার মধ্যে)।
পানমন 18

3
@ পানমন আপনি যদি>> এ => পরিবর্তন করেন তবে আপনার "1 মিনিট" এর মতো সময় শেষ হবে। আমি এই উত্তরের একটি পরিবর্তিত সংস্করণ পোস্ট করেছি যা শর্তাধীন "গুলি" যুক্ত করেছে: stackoverflow.com/a/23259289/373655
লুট

কখনও স্ট্রিং সংযুক্তকরণের ব্যবহার করেন, কিন্তু String.format আপনি একটি সমাধান আন্তর্জাতিকিকরনকৃত যাবে চান
RDS

আমি যদি এটি ডিভি ক্লাসে রাখতে চাই? আমি কি করতে পারি? দুঃখিত আমি জাভাস্ক্রিপ্টে প্রো না। আমি এই দস্তাবেজটি চেষ্টা করেছি getgetElementsByTagName ('। Sampleclass') [0]। ইনার এইচটিএমএল = সময়সীমা (তারিখ); এবং এই ডকুমেন্টটি .getElementById ('idname') [0]। ইনার এইচটিএমএল = সময়সীমা (তারিখ); কিন্তু এটি কাজ করে না কোন সাহায্য? ধন্যবাদ.
x'tian

118

এক্ষেত্রে ওভারকিল হতে পারে, তবে যদি সুযোগটি মুহুর্তটি দেখায় তবে খুব দুর্দান্ত!

Moment.js একটি জাভাস্ক্রিপ্ট ডেটটাইম লাইব্রেরি, এটি এ জাতীয় দৃশ্যের জন্য এটি ব্যবহার করতে আপনি করতে চান:

moment(yourdate).fromNow()

http://momentjs.com/docs/#/displaying/fromnow/

2018 সংযোজন : লাক্সন একটি নতুন আধুনিক গ্রন্থাগার এবং এটি দেখার জন্য মূল্যবান হতে পারে!


হ্যালো, আমি সময় আলাদা আলাদা করার জন্য আপনার উত্তরটি ব্যবহার করছি y y, মাস এবং মি এবং ডি হিসাবে দিন হিসাবে খেজুর মতো বছরের প্রথম অক্ষরগুলির প্রয়োজন হলে আমি কী করতে পারি?
নদিরাবেগিমক্সোনয়িম

57

আমি চেক করিনি (যদিও এটি কঠিন হবে না) তবে আমি মনে করি যে স্ট্যাক এক্সচেঞ্জের সাইটগুলি এই সময়ের স্ট্রিংগুলি তৈরি করতে jquery.timeagoপ্লাগইন ব্যবহার করে


এটি প্লাগইনটি ব্যবহার করা বেশ সহজ এবং এটি পরিষ্কার এবং স্বয়ংক্রিয়ভাবে আপডেট হয়।

এখানে একটি দ্রুত নমুনা (প্লাগিনের হোম পৃষ্ঠা থেকে):

প্রথমত, jQuery এবং প্লাগইন লোড করুন:

<script src="jquery.min.js" type="text/javascript"></script> <script src="jquery.timeago.js" type="text/javascript"></script>

এখন, এটি এটিকে DOM- র আপনার টাইমস্ট্যাম্পগুলির সাথে সংযুক্ত করি:

jQuery(document).ready(function() {
jQuery("abbr.timeago").timeago(); });

এটি শিরোনামে abbrএকটি ক্লাস timeagoএবং একটি আইএসও 8601 টাইমস্ট্যাম্প সহ সমস্ত উপাদানকে পরিবর্তিত করবে : <abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr>এরকম কিছুতে: <abbr class="timeago" title="July 17, 2008">about a year ago</abbr>যা ফলন দেয়: প্রায় এক বছর আগে। সময় পার হওয়ার সাথে সাথে টাইমস্ট্যাম্পগুলি স্বয়ংক্রিয়ভাবে আপডেট হবে।


11
প্রত্যেকে JQuery ব্যবহার করে না।

2
এটি jquery প্লাগইন হিসাবে উপলব্ধি করার কোনও অর্থ নেই।
অ্যালেক্সজি

57

এটি আপনাকে '2 দিন আগে' 'এখন থেকে 10 মিনিট' এর মতো অতীতের এবং পূর্ববর্তী সময়ের ফর্ম্যাটগুলি দেখায় এবং আপনি এটি কোনও তারিখ অবজেক্ট, একটি সংখ্যাসূচক টাইমস্ট্যাম্প বা একটি তারিখের স্ট্রিং পাস করতে পারেন

function time_ago(time) {

  switch (typeof time) {
    case 'number':
      break;
    case 'string':
      time = +new Date(time);
      break;
    case 'object':
      if (time.constructor === Date) time = time.getTime();
      break;
    default:
      time = +new Date();
  }
  var time_formats = [
    [60, 'seconds', 1], // 60
    [120, '1 minute ago', '1 minute from now'], // 60*2
    [3600, 'minutes', 60], // 60*60, 60
    [7200, '1 hour ago', '1 hour from now'], // 60*60*2
    [86400, 'hours', 3600], // 60*60*24, 60*60
    [172800, 'Yesterday', 'Tomorrow'], // 60*60*24*2
    [604800, 'days', 86400], // 60*60*24*7, 60*60*24
    [1209600, 'Last week', 'Next week'], // 60*60*24*7*4*2
    [2419200, 'weeks', 604800], // 60*60*24*7*4, 60*60*24*7
    [4838400, 'Last month', 'Next month'], // 60*60*24*7*4*2
    [29030400, 'months', 2419200], // 60*60*24*7*4*12, 60*60*24*7*4
    [58060800, 'Last year', 'Next year'], // 60*60*24*7*4*12*2
    [2903040000, 'years', 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12
    [5806080000, 'Last century', 'Next century'], // 60*60*24*7*4*12*100*2
    [58060800000, 'centuries', 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100
  ];
  var seconds = (+new Date() - time) / 1000,
    token = 'ago',
    list_choice = 1;

  if (seconds == 0) {
    return 'Just now'
  }
  if (seconds < 0) {
    seconds = Math.abs(seconds);
    token = 'from now';
    list_choice = 2;
  }
  var i = 0,
    format;
  while (format = time_formats[i++])
    if (seconds < format[0]) {
      if (typeof format[2] == 'string')
        return format[list_choice];
      else
        return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
    }
  return time;
}

var aDay = 24 * 60 * 60 * 1000;
console.log(time_ago(new Date(Date.now() - aDay)));
console.log(time_ago(new Date(Date.now() - aDay * 2)));


মিলিসেকেন্ডের পরিবর্তে বৃহত সময়ের স্প্যানগুলির জন্য শতাব্দী ফিরিয়ে দেওয়ার return time;সাথে শেষ লাইনটি প্রতিস্থাপন করুন format = time_formats[time_formats.length - 1]; return Math.floor(seconds / format[2]) + ' ' + format[1] + ' ' + token;
অ্যাকিলা স্যান্ডস

খুব সুন্দর! যদিও আমি আইওএসে লক্ষ্য করেছি, যখন কৌনিকটি ফিল্টার হিসাবে ব্যবহার করা হয়, ব্রাউজারটি এখানে NaN ফেরত দেয়। এটি এটিকে ঠিক করে: সময় = + নতুন তারিখ (সময়.প্রিয় (/ - / জি, '/'));
টিয়াগো

দুর্দান্ত, তবে লুপটি কুরুচিপূর্ণ এবং বিভ্রান্তিকর অবস্থায় রয়েছে ment প্রতিটি লুপে পরিবর্তন করা আরও ভাল হবে
মার্টিন ডসন

25

এখানে স্কাই স্যান্ডারের সমাধানগুলিতে সামান্য পরিবর্তন রয়েছে যা তারিখটিকে স্ট্রিং হিসাবে ইনপুট হতে দেয় এবং "73৩ সেকেন্ড" এর পরিবর্তে "1 মিনিট" এর মতো স্প্যান প্রদর্শন করতে সক্ষম

var timeSince = function(date) {
  if (typeof date !== 'object') {
    date = new Date(date);
  }

  var seconds = Math.floor((new Date() - date) / 1000);
  var intervalType;

  var interval = Math.floor(seconds / 31536000);
  if (interval >= 1) {
    intervalType = 'year';
  } else {
    interval = Math.floor(seconds / 2592000);
    if (interval >= 1) {
      intervalType = 'month';
    } else {
      interval = Math.floor(seconds / 86400);
      if (interval >= 1) {
        intervalType = 'day';
      } else {
        interval = Math.floor(seconds / 3600);
        if (interval >= 1) {
          intervalType = "hour";
        } else {
          interval = Math.floor(seconds / 60);
          if (interval >= 1) {
            intervalType = "minute";
          } else {
            interval = seconds;
            intervalType = "second";
          }
        }
      }
    }
  }

  if (interval > 1 || interval === 0) {
    intervalType += 's';
  }

  return interval + ' ' + intervalType;
};
var aDay = 24 * 60 * 60 * 1000;
console.log(timeSince(new Date(Date.now() - aDay)));
console.log(timeSince(new Date(Date.now() - aDay * 2)));


2
বিরতি 0 থেকে ছেড়ে যায় বলে এটি সেকেন্ডের জন্য কাজ করে না interval = Math.floor(seconds / 60);। আমি interval = seconds;ফাইনালে যোগ করেছি elseএবং এটি দুর্দান্ত কাজ করে।
হাওয়ার্ড

2
যদি বিরতি 0 হয় তবে আপনার "গুলি" যুক্ত করা উচিত।
জেডাব্লু

এটা সত্যিই দারুন. টিএস-এর জন্য আমাকে একটি আনরি অপারেটর যুক্ত করতে হয়েছিলlet seconds = Math.floor((+new Date() - date) / 1000);
বেন র্যাকিকোট

আপনি interval === 0শেষ পর্যন্ত এমনকি কেন চেক করেন if?
স্মার্টমোস

1
@ স্মার্টমাউস যাতে এটি "0 সেকেন্ড" এর পরিবর্তে "0 সেকেন্ড" বলে
রব

14

আপনি হিউম্যানাইজড_টাইম_স্প্যানটি দেখতে চাইতে পারেন: https://github.com/layam/js_humanized_time_span

এটি কাঠামো অজ্ঞানীয় এবং সম্পূর্ণরূপে স্বনির্ধারিত।

কেবল স্ক্রিপ্টটি ডাউনলোড / অন্তর্ভুক্ত করুন এবং তারপরে আপনি এটি করতে পারেন:

humanized_time_span("2011-05-11 12:00:00")  
   => '3 hours ago'

humanized_time_span("2011-05-11 12:00:00", "2011-05-11 16:00:00)  
   => '4 hours ago'

বা এমনকি এটি:

var custom_date_formats = {
  past: [
    { ceiling: 60, text: "less than a minute ago" },
    { ceiling: 86400, text: "$hours hours, $minutes minutes and $seconds seconds ago" },
    { ceiling: null, text: "$years years ago" }
  ],
  future: [
    { ceiling: 60, text: "in less than a minute" },
    { ceiling: 86400, text: "in $hours hours, $minutes minutes and $seconds seconds time" },
    { ceiling: null, text: "in $years years" }
  ]
}

humanized_time_span("2010/09/10 10:00:00", "2010/09/10 10:00:05", custom_date_formats) 
  => "less than a minute ago"

আরও তথ্যের জন্য দস্তাবেজগুলি পড়ুন।


4
কেবলমাত্র এটির অর্থ এটি jQuery বা এমনকি একটি ডিওএম থাকার উপর নির্ভর করে না।
উইল টমলিন্স

এটা আমাকে দেয় NaN years agoকেন ??

এটিকে ঘৃণা করলাম আমি পেয়েছি ... আপনার ব্যবহারের উদাহরণটি ভুল। আপনি আসলে "-" এর পরিবর্তে স্ল্যাশ সহ প্রথম সংখ্যাগুলি humanized_time_span("2011/05/11 12:00:00")

এটি আপনার স্থানীয় সংস্কৃতির উপর নির্ভর করে এবং ব্যবহারকারীদের মধ্যে পৃথক হতে পারে :)
মিকাস

13

উপরে ফাংশন পরিবর্তন করা হয়েছে

function timeSince(date) {

    var seconds = Math.floor(((new Date().getTime()/1000) - date)),
    interval = Math.floor(seconds / 31536000);

    if (interval > 1) return interval + "y";

    interval = Math.floor(seconds / 2592000);
    if (interval > 1) return interval + "m";

    interval = Math.floor(seconds / 86400);
    if (interval >= 1) return interval + "d";

    interval = Math.floor(seconds / 3600);
    if (interval >= 1) return interval + "h";

    interval = Math.floor(seconds / 60);
    if (interval > 1) return interval + "m ";

    return Math.floor(seconds) + "s";
}

অন্যথায় এটি "75 মিনিট" (1 থেকে 2 ঘন্টার মধ্যে) এর মতো জিনিসগুলি দেখায়। এটি এখন ধরে নেয় ইনপুট তারিখটি একটি ইউনিক্স টাইমস্ট্যাম্প।


দয়া করে তারিখটি 1000 দ্বারা ভাগ করুন।

আমি এটি ব্যবহার করেছি যেখানে সেকেন্ডে ইউনিক্স টাইমস্ট্যাম্পগুলির সাথে ডেটাবেস থেকে ডেটা আসে। এটি যখন মিলি সেকেন্ডে থাকে তখন আপনার 1000 দিয়ে বিভাজন করতে হবে
PanMan

11

অনেক পাঠযোগ্য এবং ক্রস ব্রাউজারের সামঞ্জস্যপূর্ণ কোড:

@ ট্র্যাভিস হিসাবে দেওয়া হয়েছে

var DURATION_IN_SECONDS = {
  epochs: ['year', 'month', 'day', 'hour', 'minute'],
  year: 31536000,
  month: 2592000,
  day: 86400,
  hour: 3600,
  minute: 60
};

function getDuration(seconds) {
  var epoch, interval;

  for (var i = 0; i < DURATION_IN_SECONDS.epochs.length; i++) {
    epoch = DURATION_IN_SECONDS.epochs[i];
    interval = Math.floor(seconds / DURATION_IN_SECONDS[epoch]);
    if (interval >= 1) {
      return {
        interval: interval,
        epoch: epoch
      };
    }
  }

};

function timeSince(date) {
  var seconds = Math.floor((new Date() - new Date(date)) / 1000);
  var duration = getDuration(seconds);
  var suffix = (duration.interval > 1 || duration.interval === 0) ? 's' : '';
  return duration.interval + ' ' + duration.epoch + suffix;
};

alert(timeSince('2015-09-17T18:53:23'));


নোট করুন যে এটি কিছু ভুল অনুমান করেছে যেমন প্রতিদিন 864,৪০০ সেকেন্ড হয়ে থাকে (যদি সময় অঞ্চলটি ইউটিসি তে সেট না করা হয় তবে এটি ইউটিসির পক্ষে সর্বদা সত্য ধন্যবাদ নয়)
ইতালি প্যালেআল

10

Lockly দ্বারা ব্যবহৃত হিসাবে একটি সংক্ষিপ্ত সংস্করণ :

const intervals = [
  { label: 'year', seconds: 31536000 },
  { label: 'month', seconds: 2592000 },
  { label: 'day', seconds: 86400 },
  { label: 'hour', seconds: 3600 },
  { label: 'minute', seconds: 60 },
  { label: 'second', seconds: 0 }
];

function timeSince(date) {
  const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
  const interval = intervals.find(i => i.seconds < seconds);
  const count = Math.floor(seconds / interval.seconds);
  return `${count} ${interval.label}${count !== 1 ? 's' : ''} ago`;
}

2
সংক্ষিপ্ততম ব্যবধানটির শূন্য সেকেন্ডের সময়কাল রয়েছে - এর ফলে শূন্য ত্রুটি দ্বারা বিভাজন ঘটে।
apk

@apk ঠিক আছে। <60 সেকেন্ড এটি প্রিন্ট করেInfinity seconds ago

8

এখন থেকে, ইউনিক্স টাইমস্ট্যাম্প পরম,

function timeSince(ts){
    now = new Date();
    ts = new Date(ts*1000);
    var delta = now.getTime() - ts.getTime();

    delta = delta/1000; //us to s

    var ps, pm, ph, pd, min, hou, sec, days;

    if(delta<=59){
        ps = (delta>1) ? "s": "";
        return delta+" second"+ps
    }

    if(delta>=60 && delta<=3599){
        min = Math.floor(delta/60);
        sec = delta-(min*60);
        pm = (min>1) ? "s": "";
        ps = (sec>1) ? "s": "";
        return min+" minute"+pm+" "+sec+" second"+ps;
    }

    if(delta>=3600 && delta<=86399){
        hou = Math.floor(delta/3600);
        min = Math.floor((delta-(hou*3600))/60);
        ph = (hou>1) ? "s": "";
        pm = (min>1) ? "s": "";
        return hou+" hour"+ph+" "+min+" minute"+pm;
    } 

    if(delta>=86400){
        days = Math.floor(delta/86400);
        hou =  Math.floor((delta-(days*86400))/60/60);
        pd = (days>1) ? "s": "";
        ph = (hou>1) ? "s": "";
        return days+" day"+pd+" "+hou+" hour"+ph;
    }

}

5

@ ব্যবহারকারী 1012181 দ্বারা সরবরাহ করা কোডটির একটি ES6 সংস্করণ

// Epochs
const epochs = [
    ['year', 31536000],
    ['month', 2592000],
    ['day', 86400],
    ['hour', 3600],
    ['minute', 60],
    ['second', 1]
];


// Get duration
const getDuration = (timeAgoInSeconds) => {
    for (let [name, seconds] of epochs) {
        const interval = Math.floor(timeAgoInSeconds / seconds);

        if (interval >= 1) {
            return {
                interval: interval,
                epoch: name
            };
        }
    }
};


// Calculate
const timeAgo = (date) => {
    const timeAgoInSeconds = Math.floor((new Date() - new Date(date)) / 1000);
    const {interval, epoch} = getDuration(timeAgoInSeconds);
    const suffix = interval === 1 ? '' : 's';

    return `${interval} ${epoch}${suffix} ago`;
};

@ আইবে-ভ্যানমেন পরামর্শ দিয়ে সম্পাদিত। (ধন্যবাদ!)


আপনি EPOCHS এ "সেকেন্ড: 1" অন্তর্ভুক্ত করা উচিত, অন্যথায় এটি 1 মিনিটেরও কম আগে ভেঙে যাবে :)। শেষ 3 টি ভার্সেও কি কোন ধ্রুবক হতে পারে?
ইবে ভানমেনেন

1
এছাড়াও, EPOCHS একটি অ্যারে হওয়া উচিত, কারণ বস্তুগুলি বৈশিষ্ট্য ক্রমের গ্যারান্টি দেয় না। আমি আমার পরিবর্তনগুলি gist.github.com/IbeVanmeenen/4e3e58820c9168806e57530563612886 এ সংরক্ষণ করেছি । আপনি এই উত্তর সম্পাদনা করতে তাদের অনুলিপি করতে স্বাগত জানাই :)
ইবে ভানমেনেন

5

সহজ এবং পাঠযোগ্য সংস্করণ:

const NOW = new Date()
const times = [["second", 1], ["minute", 60], ["hour", 3600], ["day", 86400], ["week", 604800], ["month", 2592000], ["year", 31536000]]

function timeAgo(date) {
    var diff = Math.round((NOW - date) / 1000)
    for (var t = 0; t < times.length; t++) {
        if (diff < times[t][1]) {
            if (t == 0) {
                return "Just now"
            } else {
                diff = Math.round(diff / times[t - 1][1])
                return diff + " " + times[t - 1][0] + (diff == 1?" ago":"s ago")
            }
        }
    }
}

3

আমি জেএস এবং পাইথন সহ একটি লিখি, দুটি প্রকল্পে খুব সুন্দর এবং সহজভাবে ব্যবহৃত হয়: একটি সাধারণ লাইব্রেরি (পরে 2kb কম) *** time agoস্টেটমেন্ট সহ তারিখের ফর্ম্যাট করতে ব্যবহৃত হত ।

সহজ, ছোট, সহজে ব্যবহৃত, এবং ভাল পরীক্ষিত।

  1. npm install timeago.js

  2. import timeago from 'timeago.js'; // or use script tag

  3. API ব্যবহার format

নমুনা:

var timeagoIns  = timeago();
timeagoIns .format('2016-06-12');

এছাড়াও আপনি রিয়েল-টাইমে রেন্ডার করতে পারেন।

var timeagoIns = timeago();
timeagoIns.render(document.querySelectorAll('time'));

৪.০ হিসাবে আপনি এর পরিবর্তে একটি ডেস্ট্রাকচার্ড আমদানি ব্যবহার করতে পারেন:import { format, render, cancel, register } from 'timeago.js';
সেমিগ্রাফিক

3

যদিও প্রশ্নটি অনেক আগেই জিজ্ঞাসা করা হয়েছিল, আশা করি এই উত্তরটি লিখলে এটি কারও সহায়ক হবে।

আপনি যে তারিখটি থেকে গণনা শুরু করতে চান তা পাস করুন। ব্যবহার moment().fromNow()এর momentjs : (আরো তথ্য দেখুন এখানে )

getRelativeTime(date) {
    const d = new Date(date * 1000);
    return moment(d).fromNow();
}

আপনি যদি এখন থেকে তারিখের জন্য সরবরাহিত তথ্য পরিবর্তন করতে চান তবে আপনি নিজের কাস্টম আপেক্ষিক সময়টি মুহূর্তের জন্য লিখুন।

উদাহরণস্বরূপ, আমার নিজের ক্ষেত্রে আমি 'one month ago'পরিবর্তে মুদ্রণ করতে চেয়েছি 'a month ago'( মুহুর্তে (d) সরবরাহ করা হয়েছে rom এখন থেকে) )। এই ক্ষেত্রে, আপনি নীচে দেওয়া কিছু লিখতে পারেন।

moment.updateLocale('en', {
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: '1 m',
        mm: '%d minutes',
        h: '1 h',
        hh: '%d hours',
        d: '1 d',
        dd: '%d days',
        M: '1 month',
        MM: '%d months',
        y: '1 y',
        yy: '%d years'
    }
});

দ্রষ্টব্য : আমি প্রকল্পের জন্য আমার কোডটি লিখেছি আগুলার 6


3

এটি সমাধানের জন্য ডেজেস আপেক্ষিক টাইম প্লাগইন ব্যবহার করতে পারেন ।

import * as dayjs from 'dayjs';
import * as relativeTime from 'dayjs/plugin/relativeTime';

dayjs.extend(relativeTime);
dayjs(dayjs('1990')).fromNow(); // x years ago

3

এটি ডেট.নো (), একক একক এবং ভবিষ্যতের তারিখ সহ কোনও বৈধ টাইমস্ট্যাম্প সঠিকভাবে পরিচালনা করবে। আমি কয়েক মাস বাকি ছিলাম তবে এগুলি যুক্ত করা সহজ হওয়া উচিত I এটিকে যতটা সম্ভব পঠনযোগ্য রাখার চেষ্টা করেছি।

function getTimeInterval(date) {
  let seconds = Math.floor((Date.now() - date) / 1000);
  let unit = "second";
  let direction = "ago";
  if (seconds < 0) {
    seconds = -seconds;
    direction = "from now";
  }
  let value = seconds;
  if (seconds >= 31536000) {
    value = Math.floor(seconds / 31536000);
    unit = "year";
  } else if (seconds >= 86400) {
    value = Math.floor(seconds / 86400);
    unit = "day";
  } else if (seconds >= 3600) {
    value = Math.floor(seconds / 3600);
    unit = "hour";
  } else if (seconds >= 60) {
    value = Math.floor(seconds / 60);
    unit = "minute";
  }
  if (value != 1)
    unit = unit + "s";
  return value + " " + unit + " " + direction;
}

console.log(getTimeInterval(Date.now())); // 0 seconds ago
console.log(getTimeInterval(Date.now() + 1000)); // 1 second from now
console.log(getTimeInterval(Date.now() - 1000)); // 1 second ago
console.log(getTimeInterval(Date.now() + 60000)); // 1 minute from now
console.log(getTimeInterval(Date.now() - 120000)); // 2 minutes ago
console.log(getTimeInterval(Date.now() + 120000)); // 2 minutes from now
console.log(getTimeInterval(Date.now() + 3600000)); // 1 hour from now
console.log(getTimeInterval(Date.now() + 360000000000)); // 11 years from now
console.log(getTimeInterval(0)); // 49 years ago


2

আমি স্কাই স্যান্ডার্স সংস্করণ পরিবর্তন করেছি। ম্যাথ.ফ্লুয়ার (...) ক্রিয়াকলাপগুলি যদি ব্লকটিতে মূল্যায়ন করা হয়

       var timeSince = function(date) {
            var seconds = Math.floor((new Date() - date) / 1000);
            var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
            if (seconds < 5){
                return "just now";
            }else if (seconds < 60){
                return seconds + " seconds ago";
            }
            else if (seconds < 3600) {
                minutes = Math.floor(seconds/60)
                if(minutes > 1)
                    return minutes + " minutes ago";
                else
                    return "1 minute ago";
            }
            else if (seconds < 86400) {
                hours = Math.floor(seconds/3600)
                if(hours > 1)
                    return hours + " hours ago";
                else
                    return "1 hour ago";
            }
            //2 days and no more
            else if (seconds < 172800) {
                days = Math.floor(seconds/86400)
                if(days > 1)
                    return days + " days ago";
                else
                    return "1 day ago";
            }
            else{

                //return new Date(time).toLocaleDateString();
                return date.getDate().toString() + " " + months[date.getMonth()] + ", " + date.getFullYear();
            }
        }

সর্বশেষে যদি একটি টাইপো থাকে তবে return days + "1 day ago";তা করা উচিতreturn "1 day ago";
মার্কো গুরনারি

2
function dateToHowManyAgo(stringDate){
    var currDate = new Date();
    var diffMs=currDate.getTime() - new Date(stringDate).getTime();
    var sec=diffMs/1000;
    if(sec<60)
        return parseInt(sec)+' second'+(parseInt(sec)>1?'s':'')+' ago';
    var min=sec/60;
    if(min<60)
        return parseInt(min)+' minute'+(parseInt(min)>1?'s':'')+' ago';
    var h=min/60;
    if(h<24)
        return parseInt(h)+' hour'+(parseInt(h)>1?'s':'')+' ago';
    var d=h/24;
    if(d<30)
        return parseInt(d)+' day'+(parseInt(d)>1?'s':'')+' ago';
    var m=d/30;
    if(m<12)
        return parseInt(m)+' month'+(parseInt(m)>1?'s':'')+' ago';
    var y=m/12;
    return parseInt(y)+' year'+(parseInt(y)>1?'s':'')+' ago';
}
console.log(dateToHowManyAgo('2019-11-07 19:17:06'));

1
function timeago(date) {
    var seconds = Math.floor((new Date() - date) / 1000);
    if(Math.round(seconds/(60*60*24*365.25)) >= 2) return Math.round(seconds/(60*60*24*365.25)) + " years ago";
    else if(Math.round(seconds/(60*60*24*365.25)) >= 1) return "1 year ago";
    else if(Math.round(seconds/(60*60*24*30.4)) >= 2) return Math.round(seconds/(60*60*24*30.4)) + " months ago";
    else if(Math.round(seconds/(60*60*24*30.4)) >= 1) return "1 month ago";
    else if(Math.round(seconds/(60*60*24*7)) >= 2) return Math.round(seconds/(60*60*24*7)) + " weeks ago";
    else if(Math.round(seconds/(60*60*24*7)) >= 1) return "1 week ago";
    else if(Math.round(seconds/(60*60*24)) >= 2) return Math.round(seconds/(60*60*24)) + " days ago";
    else if(Math.round(seconds/(60*60*24)) >= 1) return "1 day ago";
    else if(Math.round(seconds/(60*60)) >= 2) return Math.round(seconds/(60*60)) + " hours ago";
    else if(Math.round(seconds/(60*60)) >= 1) return "1 hour ago";
    else if(Math.round(seconds/60) >= 2) return Math.round(seconds/60) + " minutes ago";
    else if(Math.round(seconds/60) >= 1) return "1 minute ago";
    else if(seconds >= 2)return seconds + " seconds ago";
    else return seconds + "1 second ago";
}

1

আমার সমাধান ..

(function(global){
            const SECOND   = 1;
            const MINUTE   = 60;
            const HOUR     = 3600;
            const DAY      = 86400;
            const MONTH    = 2629746;
            const YEAR     = 31556952;
            const DECADE   = 315569520;

            global.timeAgo = function(date){
                var now = new Date();
                var diff = Math.round(( now - date ) / 1000);

                var unit = '';
                var num = 0;
                var plural = false;

                switch(true){
                    case diff <= 0:
                        return 'just now';
                    break;

                    case diff < MINUTE:
                        num = Math.round(diff / SECOND);
                        unit = 'sec';
                        plural = num > 1;
                    break;

                    case diff < HOUR:
                        num = Math.round(diff / MINUTE);
                        unit = 'min';
                        plural = num > 1;
                    break;

                    case diff < DAY:
                        num = Math.round(diff / HOUR);
                        unit = 'hour';
                        plural = num > 1;
                    break;

                    case diff < MONTH:
                        num = Math.round(diff / DAY);
                        unit = 'day';
                        plural = num > 1;
                    break;

                    case diff < YEAR:
                        num = Math.round(diff / MONTH);
                        unit = 'month';
                        plural = num > 1;
                    break;

                    case diff < DECADE:
                        num = Math.round(diff / YEAR);
                        unit = 'year';
                        plural = num > 1;
                    break;

                    default:
                        num = Math.round(diff / YEAR);
                        unit = 'year';
                        plural = num > 1;
                }

                var str = '';
                if(num){
                    str += `${num} `;
                }

                str += `${unit}`;

                if(plural){
                    str += 's';
                }

                str += ' ago';

                return str;
            }
        })(window);

        console.log(timeAgo(new Date()));
        console.log(timeAgo(new Date('Jun 03 2018 15:12:19 GMT+0300 (FLE Daylight Time)')));
        console.log(timeAgo(new Date('Jun 03 2018 13:12:19 GMT+0300 (FLE Daylight Time)')));
        console.log(timeAgo(new Date('May 28 2018 13:12:19 GMT+0300 (FLE Daylight Time)')));
        console.log(timeAgo(new Date('May 28 2017 13:12:19 GMT+0300 (FLE Daylight Time)')));
        console.log(timeAgo(new Date('May 28 2000 13:12:19 GMT+0300 (FLE Daylight Time)')));
        console.log(timeAgo(new Date('Sep 10 1994 13:12:19 GMT+0300 (FLE Daylight Time)')));

1

অন্যান্য উত্তরের ভিত্তিতে এটি আমার ছুরিকাঘাত।

function timeSince(date) {
    let minute = 60;
    let hour   = minute * 60;
    let day    = hour   * 24;
    let month  = day    * 30;
    let year   = day    * 365;

    let suffix = ' ago';

    let elapsed = Math.floor((Date.now() - date) / 1000);

    if (elapsed < minute) {
        return 'just now';
    }

    // get an array in the form of [number, string]
    let a = elapsed < hour  && [Math.floor(elapsed / minute), 'minute'] ||
            elapsed < day   && [Math.floor(elapsed / hour), 'hour']     ||
            elapsed < month && [Math.floor(elapsed / day), 'day']       ||
            elapsed < year  && [Math.floor(elapsed / month), 'month']   ||
            [Math.floor(elapsed / year), 'year'];

    // pluralise and append suffix
    return a[0] + ' ' + a[1] + (a[0] === 1 ? '' : 's') + suffix;
}

0

আমি এর উত্তরের সন্ধান করছিলাম এবং এর মধ্যে একটি সমাধান প্রায়শই বাস্তবায়ন করেছি, তবে একজন সহকর্মী আমাকে react-intlগ্রন্থাগারটি পরীক্ষা করার জন্য স্মরণ করিয়ে দিয়েছিল যেহেতু আমরা ইতিমধ্যে এটি ব্যবহার করছি।

সুতরাং সমাধানগুলিতে যুক্ত করা হচ্ছে ... আপনি যদি react-intlগ্রন্থাগারটি ব্যবহার করছেন তবে তাদের <FormattedRelative>এটির জন্য একটি উপাদান রয়েছে।

https://github.com/yahoo/react-intl/wiki/Components#formattedrelative


0

আমি যা করেছি তা এখানে (বস্তুটি তার মানের সাথে সময়ের একককেও ফেরত দেয়):

function timeSince(post_date, reference)
{
	var reference = reference ? new Date(reference) : new Date(),
		diff = reference - new Date(post_date + ' GMT-0000'),
		date = new Date(diff),
		object = { unit: null, value: null };
	
	if (diff < 86400000)
	{
		var secs  = date.getSeconds(),
			mins  = date.getMinutes(),
			hours = date.getHours(),
			array = [ ['second', secs], ['minute', mins], ['hour', hours] ];
	}
	else
	{
		var days   = date.getDate(),
			weeks  = Math.floor(days / 7),
			months = date.getMonth(),
			years  = date.getFullYear() - 1970,
			array  = [ ['day', days], ['week', weeks], ['month', months], ['year', years] ];
	}

	for (var i = 0; i < array.length; i++)
	{
		array[i][0] += array[i][1] != 1 ? 's' : '';

		object.unit  = array[i][1] >= 1 ? array[i][0] : object.unit;
		object.value = array[i][1] >= 1 ? array[i][1] : object.value;
	}

	return object;
}

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